【问题标题】:Convert nvarchar ISO-8601 date to datetime in SQL Server在 SQL Server 中将 nvarchar ISO-8601 日期转换为日期时间
【发布时间】:2012-04-29 18:38:18
【问题描述】:

希望这个快点。

以下不起作用:

DECLARE @stringDate nvarchar(50)
SET @stringDate = '0001-01-01T12:00:00'

SELECT 
    @stringDate AS StringDate,
    CONVERT(datetime, @stringDate, 126) AS ConvertedDate

产生错误:将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。

实现转换的最简单方法是什么?

谢谢

【问题讨论】:

    标签: sql sql-server sql-server-2008 type-conversion


    【解决方案1】:

    它不起作用,因为对于DATETIME data type

    日期范围 [is] 1753 年 1 月 1 日到 9999 年 12 月 31 日。

    你必须使用new data type DATETIME2:

    SET ANSI_WARNINGS OFF;  --Not recommended
    SET ARITHABORT OFF;     --Not recommended
    DECLARE @stringDate nvarchar(50)
    SET @stringDate = '0001-01-01T12:00:00'
    
    SELECT 
        @stringDate AS StringDate,
        CONVERT(datetime, @stringDate, 126) AS Converted_DATETIME,
        CONVERT(datetime2, @stringDate, 126) AS Converted_DATETIME2_A,
        CONVERT(datetime2(0), @stringDate, 126) AS Converted_DATETIME2_B
    

    结果:

    StringDate          Converted_DATETIME Converted_DATETIME2_A  Converted_DATETIME2_B
    ------------------- ------------------ ---------------------- ----------------------
    0001-01-01T12:00:00 NULL               0001-01-01 12:00:00.00 0001-01-01 12:00:00
    Arithmetic overflow occurred.
    

    注意:如果您的日期/时间值没有“小数秒精度”,您可以更改 DATETIME2 数据类型的默认精度:DATETIME2(0)

    【讨论】:

      【解决方案2】:

      Datetime 类型不支持 0001 年。支持的范围是 1753 到 9999。
      作为一种解决方法,您可以改用 DateTime2 类型

      SELECT 
          @stringDate AS StringDate,
          CONVERT(datetime2, @stringDate, 126) AS ConvertedDate
      

      【讨论】:

      • SQL Server 2008 中的DATEDATETIME2 数据类型支持01/01/0001 日期.....
      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2021-10-09
      • 2015-01-30
      • 1970-01-01
      • 2013-01-30
      • 2021-05-27
      相关资源
      最近更新 更多