【问题标题】:How to use 'America/New_York ' in At Time Zone in SQL如何在 SQL 的时区中使用“America/New_York”
【发布时间】:2020-04-16 22:08:17
【问题描述】:

我有这段代码在 SQL 中运行良好。但是我想使用不同的时区格式,例如 'America/New_York' 而不是 'US Eastern Standard Time'

SELECT TODATETIMEOFFSET(CAST(CURRENT_TIMESTAMP as datetime), -5) AT TIME ZONE 'US Eastern Standard Time'
FROM dual

【问题讨论】:

  • 请同时标记您的 SQL 引擎。
  • 您是否只想将美国东部标准时间的值替换为 America/New_York?我认为 'SELECT TODATETIMEOFFSET(CAST(CURRENT_TIMESTAMP as datetime), -5) AT TIME ZONE 'America/New_York' FROM dual' 可以。
  • 我正在动态获取这些时区,其中有很多。 America/New_York 只是一个例子。我收到相同的错误“555555 AT TIME ZONE 子句的时区参数“美国/纽约”无效”

标签: sql sql-server timezone


【解决方案1】:

目前,SQL Server 仅支持 Windows 时区标识符。 You can vote for adding IANA time zone support here.

与此同时,您有以下选择:

  • 在您的应用程序层中,您可以将 IANA 时区 ID 转换为等效的 Windows 时区 ID。如果您使用的是 .NET,最简单的方法是使用我的 TimeZoneConverter 库。否则,您可以手动使用CLDR mappings file,或任何基于它的库实现。

  • 您可以使用我的 SQL Server Time Zone Support 项目,它使用自定义表和函数而不是 AT TIME ZONE 语句。

  • 您可以将所有时区转换逻辑移到应用程序层而不是数据库中。

另外,小点 - US Eastern Standard Time 映射到 America/Indianapolis。你可能想要Eastern Standard Time,它映射到America/New_York。

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多