0

如果值为空,我试图从 sql 中显示“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
4

1 回答 1

2

这是你的问题:

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

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

来自 MSDN:

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

此外,您的@NewDate变量是 type datetime2,但您尝试使用varchar(100)-

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

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

SET @NewDate = '0001-01-01';
于 2017-08-31T08:59:54.757 回答