代码之家  ›  专栏  ›  技术社区  ›  Umar.H

转换SQL Server时区对象'yyyy-mm-dd-HH:mm;SS+HH`到有效的日期时间(UTC)

  •  1
  • Umar.H  · 技术社区  · 3 年前

    我有一个日期时间值的字符串表示,它有一个偏移量 +03 我假设这意味着+03小时,我很可能是错的。

    这是我表格中的一个典型值:

    2015-05-15 21:35:19+03

    只有两个唯一的值 +3 +2 我不确定源系统是什么。

    我想知道转换这种物体的正确方法是什么?我当前的方法是拆分偏移量,并将剩余部分转换为datetime对象,然后使用dateadd添加偏移量

    SELECT DATEADD(hour, CAST(value AS int)
              , CAST(REPLACE(dt, '+' + value, '') AS DATETIME2)) AS offset_val
    , dt
    FROM (
    
           VALUES ('2015-05-15 21:35:19+03')
                , ('2015-05-15 19:35:19+03')
    ) t(dt)
      CROSS APPLY (
                    SELECT VALUE
                         , ROW_NUMBER() OVER (ORDER BY VALUE) AS seq
                    FROM STRING_SPLIT(t.dt, '+')
    ) ch
    WHERE
      seq = 1
    

    +---------------------------+----------------------+
    |offset_val                 |dt                    |
    +---------------------------+----------------------+
    |2015-05-16 00:35:19.0000000|2015-05-15 21:35:19+03|
    |2015-05-15 22:35:19.0000000|2015-05-15 19:35:19+03|
    +---------------------------+----------------------+
    
    1 回复  |  直到 3 年前
        1
  •  2
  •   Dale K    3 年前

    反过来看,21:35:19+03是UTC+3,代表UTC的18:35:19。

    话虽如此,字符串表示法的解析与 datetimeoffset 然后您可以将其转换为UTC:

    SELECT PARSE('2015-05-15 21:35:19+03' AS datetimeoffset USING 'en-us') AT TIME ZONE 'UTC'