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,每个服务器 运行(设置正确的连接字符串)。我很困惑,因为如果成功它不会输出任何文本,但它解决了这个问题。我的测试用例现在没问题了。
我们是 运行 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,每个服务器 运行(设置正确的连接字符串)。我很困惑,因为如果成功它不会输出任何文本,但它解决了这个问题。我的测试用例现在没问题了。