【问题标题】:Azure SQL Convert "Time zone display name" to "Time zone ID"Azure SQL 将“时区显示名称”转换为“时区 ID”
【发布时间】:2021-02-05 22:42:52
【问题描述】:

我正在使用最新版本的 Azure SQL。我有一系列Time zone display name 并想将它们转换为Time zone ID。我知道 SQL Server 包含显示名称和 ID。 sys.time_zone_info 拥有所有的Time zone ID,但是像CURRENT_TIMEZONE () 这样的命令输出Time zone display name。我希望的是一个简单的函数,它接受一个字符串Time zone display name 并返回名称映射到的Time zone ID,但我找不到任何引用。而且我找不到实际存储映射的表。

参考 - Time zones in Azure SQL Managed Instance

【问题讨论】:

    标签: azure-sql-database azure-sql-server azure-sql


    【解决方案1】:

    sys.time_zone_info 中,名称​​是 ID。对于标准化目的来说不是最好的。

    如果您使用它来为您的应用程序创建自己的内部时区列表,那么我认为 Joseph Xu 的答案是正确的。

    如果您使用它来查询需要时区本地化的 Azure SQL,请记住,根据 Azure SQL 文档,数据库在 UTC 中运行,并且 CURRENT_TIMEZONE_ID() 将始终返回 UTC

    【讨论】:

    • 不错的演练@WaitingForGuacamole,我+10。
    • 最后,我不得不创建一个表来按预期进行转换。我希望有人知道一些厚颜无耻的功能,可以让我从“(UTC-05:00)Chetumal”到“东部标准时间(墨西哥)”,后者是sys.time_zone_info中使用的id跨度>
    【解决方案2】:

    我认为我们可以创建一个表来存储具有两列Time zone IDTime zone display name 的信息。然后创建一个存储过程来查询,输入Time zone display namereturn Time zone ID

    【讨论】:

      【解决方案3】:

      据我所知,SQL Azure 不提供从Time Zone ID 转换为Time Zone display name 的表。我认为没有任何表格包含该信息,因为sys.time_zone_info 系统视图obtains the information from internal functions 而不是您可以检查的其他表格。

      您可以使用T-SQL Toolbox 中的一些表格和函数,或者您可以创建自己的表格。

      使用自定义表格

      您可以从TSqlToolbox 获取(和/或修改)用于创建表的代码。此代码创建一个包含所需信息的表DateTimeUtil.Timezone

      我做了一个例子,你可以试试db<>fiddle

      SELECT identifier 
        FROM [TimeZone]
       WHERE [TimeZone].[DisplayName] = '(UTC-08: 00) Baja California'
      
      | Identifier                       |
      |----------------------------------|
      | Pacific Standard Time (Mexico)   |
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多