夏令时导致数据库中的日期不正确
背景:
我对夏令时更改有疑问。输入到数据库中的任何记录(旁注:我无法访问输入此数据的脚本/代码以修复它)2021-03-28和2021-10-31以不正确的日期输入到数据库中。例如:
输入的记录2021-03-26最终在数据库中作为2021-03-26 00:00:00,这是正确的。
输入的记录2021-03-29最终会出现在数据库中,因为2021-03-28 23:00:00这是不正确的。
因此,当我尝试搜索在 on 中输入的记录时2021-03-26,查询工作正常,但是如果我尝试搜索在 on 中输入的2021-03-29记录,由于时间更改,它会返回错误日期的记录。
样本数据:
ColDate, ColName
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
2021-03-28 23:00:00, SomeName -- INCORRECT DATE
工作示例:
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @StartDate = '2021-03-26 00:00:00'
SET @EndDate = '2021-03-26 23:59:59'
SELECT *
FROM tblName
WHERE ColDate BETWEEN @StartDate AND @EndDate
以上将返回:
ColDate, ColName
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
2021-03-26 00:00:00, SomeName -- CORRECT DATE
无工作示例:
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @StartDate = '2021-03-29 00:00:00'
SET @EndDate = '2021-03-29 23:59:59'
SELECT *
FROM tblName
WHERE ColDate BETWEEN @StartDate AND @EndDate
以上将不会从示例数据中返回任何内容。
题:
我该如何解决这个问题?如前所述,我无法控制数据输入,开发人员也没有兴趣解决这个问题。
我是否需要使用IF报表并检查日期是否在 2021-03-28 和 2021-10-31 之间并相应地将日期调整 1 小时?或者有没有更好的方法来解决这个问题?
更新 - 可能的解决方案:
以下查询似乎有效 (2021-03-26):
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @StartDate = '2021-03-26 00:00:00'
SET @EndDate = '2021-03-26 23:59:59'
SELECT
ColDate AT TIME ZONE 'UTC' AT TIME ZONE 'GMT Standard Time',
ColName
FROM tblName
WHERE ColDate BETWEEN @StartDate AT TIME ZONE 'GMT Standard Time' AT TIME ZONE 'UTC' AND @EndDate AT TIME ZONE 'GMT Standard Time' AT TIME ZONE 'UTC'
以下查询似乎有效 (2021-03-29):
DECLARE @StartDate datetime
DECLARE @EndDate datetime
SET @StartDate = '2021-03-29 00:00:00'
SET @EndDate = '2021-03-29 23:59:59'
SELECT
ColDate AT TIME ZONE 'UTC' AT TIME ZONE 'GMT Standard Time',
ColName
FROM tblName
WHERE ColDate BETWEEN @StartDate AT TIME ZONE 'GMT Standard Time' AT TIME ZONE 'UTC' AND @EndDate AT TIME ZONE 'GMT Standard Time' AT TIME ZONE 'UTC'
更新 - 问题:
上述更新似乎有效,但我忽略了什么吗?