ConvertZone() 使用 TZDB SQL Server 区域支持返回 NULL
Posted
技术标签:
【中文标题】ConvertZone() 使用 TZDB SQL Server 区域支持返回 NULL【英文标题】:ConvertZone() returns NULL using TZDB SQL Server Zone Support 【发布时间】:2021-07-07 03:49:36 【问题描述】:我们正在运行 SQL Server 2008 R2,因此对于时区我们使用Matt Johnson's SqlServerTimeZoneSupport/ 我们使用 ConvertZone 为我们的客户即时转换日期时间。澳大利亚的一些州支持夏令时,有些州不支持。无法升级 SQL Server。
我正在尝试解决 ConvertZone()
在上周的日期返回 null 的问题。可能与夏令时有关。我试过摆弄弹簧前进和后退位,但没有成功。
下面列出的是一个测试用例:
DECLARE @dates table
(
[Start] datetime,
[End] datetime
)
insert into @dates([Start], [End])
VALUES
('2021-04-05 06:51:06.000', '2021-04-05 06:51:06.000'),
('2021-04-05 18:47:00.000', '2021-04-05 18:47:00.000'),
('2021-04-05 19:45:24.000', '2021-04-05 20:12:00.000'),
('2021-04-05 05:29:00.000', '2021-04-05 05:29:06.000'),
('2021-04-05 11:23:32.000', '2021-04-05 11:23:32.000'),
('2021-04-05 17:23:56.000', '2021-04-05 17:23:56.000'),
('2021-04-05 06:34:56.000', '2021-04-05 06:39:30.000'),
('2021-04-05 06:51:35.000', '2021-04-05 06:54:30.000'),
('2021-04-05 08:05:48.000', '2021-04-05 08:07:30.000'),
('2021-04-05 08:34:09.000', '2021-04-05 08:34:30.000'),
('2021-04-05 10:42:13.000', '2021-04-05 10:46:00.000'),
('2021-04-11 14:24:58.000', '2021-04-11 14:30:30.000'),
('2021-04-11 17:11:26.000', '2021-04-11 17:19:39.000'),
('2021-04-11 06:55:17.000', '2021-04-11 06:55:30.000'),
('2021-04-11 18:25:19.000', '2021-04-11 18:25:37.000'),
('2021-04-11 18:27:21.000', '2021-04-11 18:27:30.000'),
('2021-04-11 18:28:23.000', '2021-04-11 18:28:30.000'),
('2021-04-11 18:28:48.000', '2021-04-11 18:30:43.000')
SELECT
[Start],
CONVERT(datetime, Tzdb.ConvertZone([start], 'Australia/NSW', 'Australia/Queensland', 1, 1)) as StartAdjusted,
[End],
CONVERT(datetime, Tzdb.ConvertZone([end], 'Australia/NSW', 'Australia/Queensland', 1, 1)) as EndAdjusted
FROM @dates
Tzdb.ConvertZone()
是从上面链接的 SQLServerTimeZoneSupport git 安装的。它创建为它自己的 TZDB 架构。
所有这些调整后的日期都返回 NULL。有什么建议吗?
【问题讨论】:
The author states "或者,如果由于某种原因您必须完全在 SQL Server 中执行此操作而不转换到 Windows 时区,那么您将需要依赖诸如我的 SqlServerTimeZoneSupport 项目之类的项目。那个是有点旧而且维护得不是很好,所以如果你能提供帮助,我建议不要使用这种方法。” 我投票结束这个问题,因为它是针对组件支持团队的问题。 您可以通过在上面的答案中添加评论来尝试 ping 作者... 我实际上希望其他具有时区知识的用户发表评论。我在 git 上为作者创建了一张票。 @matt-johnson-pint 你在吗? ***.com/users/634824/matt-johnson-pint 【参考方案1】:@matt-johnson-pint 建议我刷新我的时区表。这涉及从项目页面下载和使用 SqlTzLoader,为每个服务器运行(设置正确的连接字符串)。我很困惑,因为如果成功它不会输出任何文本,但它解决了这个问题。我的测试用例现在很好。
【讨论】:
以上是关于ConvertZone() 使用 TZDB SQL Server 区域支持返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章