如何将'01 / 01/0001'转换为datetime2

时间:2017-08-31 08:55:44

标签: sql sql-server datetime2

如果值为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

1 个答案:

答案 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';