gpt4 book ai didi

tsql - 如何在 SQL Server 中将 DateTime 字符串转换为 DateTime

转载 作者:行者123 更新时间:2023-12-04 22:23:37 24 4
gpt4 key购买 nike

我有一个这种格式的 DateTime varchar:2005-08-08T00:00:00+01:00。

  • 这种格式有名字吗? (它不是 ISO8601。是 RFC3339?)
  • 如何使用 Transact-Sql 将其转换为 DateTime?

  • 编辑
    这是一个摘要答案,从其他人的输入拼凑而成:
  • 它是 ISO8601,与 UTC 有时间偏移。如果是 UTC,它将以“Z”而不是“+01:00”结尾。 wikipedia
  • 您可以将其转换为本地时间或 UTC,如下所示:

    DECLARE @d VARCHAR(25) SET @d = '2007-08-08T00:01:00+01:00' SET @d = '2007-08-08T00:01:00-01:00' SET @d = '2007-08-08T00:01:00+05:30'

    SELECT @d as Input, CONVERT(DATETIME, LEFT(@d, 19), 126) AS LocalDate , DATEADD(MINUTE , -CAST((SUBSTRING(@d, 20, 1) + RIGHT(@d, 2)) AS INT) , DATEADD(HOUR ,-CAST(SUBSTRING(@d, 20, 3) AS INT) , CONVERT(DATETIME, LEFT(@d, 19), 126))) as UtcDate WHERE @d LIKE '_--_T__::[+-]:'


  • 结果:
    Input                     LocalDate               UtcDate
    ------------------------- ----------------------- -----------------------
    2007-08-08T00:01:00+01:00 2007-08-08 00:01:00.000 2007-08-07 23:01:00.000

    2007-08-08T00:01:00-01:00 2007-08-08 00:01:00.000 2007-08-08 01:01:00.000

    2007-08-08T00:01:00+05:30 2007-08-08 00:01:00.000 2007-08-07 18:31:00.000

    最佳答案

    在 SQL Server 中 2008 您可以使用 datetimeoffset数据类型。

    SELECT [Result] = CONVERT(datetimeoffset, '2005-08-08T00:01:00+01:00', 127)

    输出:
    Result
    ----------------------------------
    2005-08-08 00:01:00.0000000 +01:00

    在 SQL Server 中 2005 更早的时候,您可以计算 UTC 日期和偏移量:
    SELECT [LocalDate], [OffsetMinutes], [UtcDate]
    FROM
    (
    SELECT [IsoDate] = '2007-08-08T00:01:00+01:00'
    ) A
    OUTER APPLY
    (
    SELECT [LocalDate] = CONVERT(datetime, LEFT([IsoDate], 19), 126)
    , [OffsetMinutes] =
    CASE SUBSTRING([IsoDate], 20, 1)
    WHEN '+' THEN +1
    WHEN '-' THEN -1
    END
    * DATEDIFF(minute, 0,
    CAST(SUBSTRING([IsoDate], 21, 5) + ':00' AS datetime))
    WHERE [IsoDate] LIKE '____-__-__T__:__:__[+-]__:__'
    ) B
    OUTER APPLY
    (
    SELECT [UtcDate] = DATEADD(minute, -[OffsetMinutes], [LocalDate])
    ) C

    输出:
    LocalDate               OffsetMinutes UtcDate
    ----------------------- ------------- -----------------------
    2007-08-08 00:01:00.000 60 2007-08-07 23:01:00.000

    关于tsql - 如何在 SQL Server 中将 DateTime 字符串转换为 DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300647/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com