SQL Server日期时间数据,超出范围错误



我从这段代码中得到以下错误

留言242,第16层,第3州,第3线
将varchar数据类型转换为日期时间数据类型导致值超出范围。

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

除非我遗漏了什么,否则这些都可以像这样简化。我没有看到在date和varchar类型之间进行强制转换的理由。

case 
when datediff(dd,a.ContractStartDate, 
              dateadd(year,(case when a.TRSCustNO = 89555 then 2 else 3 end), a.WarrStartDate)
          )=0
then 
     dateadd(year, (case when a.TRSCustNO = 89555 then 2 else 3 end), 
              dateadd(dd,-1,a.WarrStartDate)
     )
else
     dateadd(year, (case when a.TRSCustNO = 89555 then 2 else 3 end), a.WarrStartDate)  
end as EarnDays

如果我错过了重点,请告诉我。

如果你想知道为什么你得到这个错误,只是不要把它转换回一个日期,看看输出

相关内容

  • 没有找到相关文章

最新更新