如何将'01/01/0001'转换为datetime2
问题描述:
如果值为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
答
这里是你的问题:
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';
哦,所以这是-5 – Kokombads