夏令时导致数据库中的日期不正确

背景:

我对夏令时更改有疑问。输入到数据库中的任何记录(旁注:我无法访问输入此数据的脚本/代码以修复它)2021-03-282021-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'

更新 - 问题:

上述更新似乎有效,但我忽略了什么吗?

以上是夏令时导致数据库中的日期不正确的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>