2017-08-31 46 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

相關問題