Azure SQL 将 "Time zone display name" 转换为 "Time zone ID"

Azure SQL Convert "Time zone display name" to "Time zone ID"

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

参考 - Time zones in Azure SQL Managed Instance

我认为我们可以创建一个 table 来存储包含两列 Time zone IDTime zone display name 的信息。然后创建一个存储过程来查询,输入 Time zone display name return Time zone ID.

sys.time_zone_info中,名字的ID。不是最大的标准化目的。

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

如果您将此用于针对 Azure SQL 的查询并期望时区本地化,请记住,根据 Azure SQL 文档,数据库在 UTC 中运行, CURRENT_TIMEZONE_ID() 将永远 return UTC

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

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

使用自定义 table

您可以获得(and/or 修改)从 TSqlToolbox 创建 table 的代码。此代码创建一个包含所需信息的 table DateTimeUtil.Timezone

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

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