2017-08-31 115 views
0

如果值为null,我试图从sql中显示'01/01/0001'。但是,当我转换成价值DATETIME2,它说:如何将'01/01/0001'转换为datetime2

消息517,级别16,状态3,行18 添加值到“DATETIME2”列导致溢出。

这是我的尝试:

Declare @NewDate as DateTime2 


     SELECT @Tem = Ab.Date_out 

     FROM Timesheet_header Ab 
     WHERE (Ab.Employee_id = 3424) 
      AND (Ab.Work_date BETWEEN ('2017-08-31') AND ('2017-08-31')) 
      print @Tem 

     if(@Tem IS NULL) 
      Begin 
       set @NewDate = CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('0001-01-01' AS DATETIME2)),100) 
--some select clause here 
      End 
     else 
      Begin 
       --some select clause here 
      End 

      print @Tem 
      print @NewDate 

回答

2

这里是你的问题:

DATEADD(DAY,-5,CAST('0001-01-01' AS DATETIME2)) 

Datetime2最小值是0001-01-01,但你尝试创建一个值的前5天。

从MSDN:

日期范围0001-01-01至9999-12-31

此外,您@NewDate变量是datetime2类型,但你尝试用varchar(100)填充它 -

set @NewDate = CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('0001-01-01' AS DATETIME2)),100) 

这是没有意义的。如果有的话,你应该做这样简单的事情:

SET @NewDate = '0001-01-01'; 
+0

哦,所以这是-5 – Kokombads

相关问题