【问题标题】:SQL Server date format to Datetimeoffset with specifc formatSQL Server 日期格式到具有特定格式的 Datetimeoffset
【发布时间】:2020-05-28 15:57:51
【问题描述】:

我在 SQL Server 中有一个包含日期时间字段的数据库表。

我必须发送如下示例。 能否请您帮助如何获取此日期格式?

示例:2020-06-10T13:11:00-05:00

谢谢

【问题讨论】:

  • datetimeoffset 的支持在 SQL Server 2008 上最少,也完全不受支持。这对于完全支持的 SQL Server 版本来说是微不足道的。

标签: sql sql-server sql-server-2008


【解决方案1】:

如果您使用的是受支持的 SQL Server 版本,这实际上非常简单。如果我们假设表中的值为2020-06-10T13:11:00,则只需要CONVERTSWITCHOFFSET

SELECT V.Dt,
       SWITCHOFFSET(CONVERT(datetimeoffset(0),V.dt),'-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);

如果它实际上是 UTC 时间,并且您需要将其更改为(我假设)Central,那么它将是:

SELECT V.Dt,
       CONVERT(datetimeoffset(0),V.dt) AT TIME ZONE 'Central Standard Time'
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);

相反,您将不得不做一些varchar 操作,因为您使用的是完全不受支持的 SQL Server 版本:

--If switching the offset
SELECT V.Dt,
       CONVERT(datetimeoffset(0),CONVERT(varchar(20),V.Dt,126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T13:11:00')))V(Dt);

--If changing the offset
SELECT V.Dt,
       CONVERT(datetimeoffset(0),CONVERT(varchar(20),DATEADD(HOUR, -5,V.Dt),126) + '-05:00')
FROM (VALUES(CONVERT(datetime2(0),'2020-06-10T18:11:00')))V(Dt);

请注意,这两个都与 DST 无关,因为它是 SWITCHOFFSET。只有AT TIME ZONE 会考虑夏令时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 2017-05-12
    相关资源
    最近更新 更多