【问题标题】:How to convert '01/01/0001' to datetime2如何将 '01/01/0001' 转换为 datetime2
【发布时间】:2017-08-31 08:55:43
【问题描述】:

如果值为空,我试图从 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

【问题讨论】:

    标签: sql sql-server datetime2


    【解决方案1】:

    这是你的问题:

    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
    猜你喜欢
    • 2016-05-25
    • 2018-08-08
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2018-12-06
    相关资源
    最近更新 更多