ConvertZone() returns NULL 使用 TZDB SQL 服务器区域支持

ConvertZone() returns NULL using TZDB SQL Server Zone Support

我们是 运行 SQL Server 2008 R2,所以对于时区的东西我们使用 Matt Johnson's SqlServerTimeZoneSupport/ 我们使用 ConvertZone 为我们的客户即时转换日期时间。澳大利亚有些州支持夏令时,有些则不支持。无法升级 SQL 服务器。

我正在尝试解决一个问题,其中 ConvertZone() 对上周的日期 returning 为 null。可能与夏令时有关。我试过摆弄 spring 前进和后退位,但没有成功。

下面列出了一个测试用例:

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 模式创建的。

所有这些调整后的日期return NULL。有什么建议吗?

@matt-johnson-pint 建议我刷新时区表。这涉及从项目页面下载和使用 SqlTzLoader,每个服务器 运行(设置正确的连接字符串)。我很困惑,因为如果成功它不会输出任何文本,但它解决了这个问题。我的测试用例现在没问题了。