【发布时间】:2014-05-05 00:10:18
【问题描述】:
我从这段代码中得到以下错误
消息 242,第 16 级,状态 3,第 3 行
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
T-SQL:
datediff(dd, a.ContractStartDate,
cast(case when isdate(
cast(datepart(month, dateadd(mm, 0, a.WarrStartDate)) as varchar(2)) + '/' +
cast('00' + datepart(DAY, a.WarrStartDate) as varchar(2)) + '/' +
cast(datepart(year, dateadd(YEAR, case when a.TRSCustNO = 89555 then 2 else 3 end, a.WarrStartDate)) as varchar(4)))=0
then
cast('00'+datepart(month,dateadd(mm,0,a.WarrStartDate))as varchar(2))+'/'+
cast('00'+datepart(DAY,dateadd(dd,-1,a.WarrStartDate)) as varchar(2)) +'/'+
cast(datepart(year,dateadd(YEAR,case when a.TRSCustNO = 89555 then 2 else 3 end
,a.WarrStartDate))as varchar(4))
else
cast('00'+datepart(month,dateadd(mm,0,a.WarrStartDate))as varchar(2))+'/'+
cast('00'+datepart(DAY,a.WarrStartDate) as varchar(2)) +'/'+
cast(datepart(year,dateadd(YEAR,case when a.TRSCustNO = 89555 then 2 else 3 end
,a.WarrStartDate))as varchar(4)
) end
as datetime)
) as EarnDays
【问题讨论】:
-
首先确保 varchar=>datetime 转换中的所有字符串始终采用 YYYYMMDD 格式。
-
那么移动代码那年然后月然后日期??我已经这样做了,但它仍然没有工作
-
我认为@Alejandro 是说对文本字符串使用 ISO 日期格式,这样就不需要转换日期。
标签: sql-server datetime