【问题标题】:Conversion failed converting to datetime from character string从字符串转换为日期时间的转换失败
【发布时间】:2013-09-16 16:33:36
【问题描述】:

我尝试了下面的示例函数...并且我尝试了许多其他方式,但我仍然收到错误,因为“从字符串转换日期时间时转换失败”.. 我所尝试的只是来自这个函数,我正在返回一个日期时间,但这里的某个地方它仍然是字符串...

请指教

declare  @V_Year nvarchar (4), @Test datetime , @t1 as datetime  , @t2 as datetime 
declare @Mon varchar(5) , @dayz varchar (5) , @GMTStart varchar(20)
set @Mon = '03' 
set @t1  = cast ( @Mon as datetime)
set @dayz = '01'
set @t2  = cast ( @dayz as datetime)
SELECT @V_Year =  DATEPART(year, getdate())
set @GMTStart  = @Mon + '-' + @dayz + '-' + convert(nvarchar,@V_Year)
set @Test = Cast(@GMTStart as datetime)
select @Test

【问题讨论】:

标签: sql-server sql-server-2005 datetime


【解决方案1】:

您的代码正在创建当年 3 月 3 日的日期时间值。

日期字符串的解释取决于set dateformat,除非您使用格式yyyymmdd

从你的代码中删除所有似乎没有任何用处的东西会让你得到这个。

select cast(cast(year(getdate()) as char(4))+'0301' as datetime)

【讨论】:

    【解决方案2】:

    我稍微修改了你的代码:

    declare  
        @V_Year nvarchar (4), 
        @Test datetime , 
        @t1 as datetime , 
        @t2 as datetime 
    declare 
        @Mon varchar(8), --here need to be varchar(8) because datetime has 8 digits
        @dayz varchar(5), 
        @GMTStart varchar(20)
    set @Mon = '20130101' --here you must provide full date, not a part, because is not possible to convert just part of date into full date
    set @t1  = cast (@Mon as datetime) --this will work with 
    --set @dayz = '01'
    --set @t2  = cast (@dayz as datetime) --this line not work with just day, must provide full date
    
    SET @V_Year =  DATEPART(year, getdate()) --here first set a variable, and then select
    SELECT @V_Year
    set @GMTStart  = @Mon + '-' + @dayz + '-' + convert(nvarchar, @V_Year)
    set @Test = Cast(@GMTStart as datetime)
    select @Test
    

    【讨论】:

      猜你喜欢
      • 2013-03-13
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2012-04-17
      • 2017-12-07
      相关资源
      最近更新 更多