如果值为null,我试图从sql显示'01 / 01/0001'。但是当我将值转换为datetime2时,它会说:
Msg 517,Level 16,State 3,Line 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
答案 0 :(得分: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';