存储在 SQL Server DB 中的 DateTime 不考虑夏令时。当我把它拉出来时,我该如何解决这个问题?
Posted
技术标签:
【中文标题】存储在 SQL Server DB 中的 DateTime 不考虑夏令时。当我把它拉出来时,我该如何解决这个问题?【英文标题】:DateTime stored in SQL Server DB does not account for daylight savings time. How can I fix this when I pull it out? 【发布时间】:2018-11-24 16:13:45 【问题描述】:我无法控制 EST 中的日志日期时间的机器。它不会切换到夏令时。当我提取数据时,它会将我所有的报告都搞砸了一个小时。有没有办法在我的查询中解决这个问题?使用 SQL Server 2014。
【问题讨论】:
问题是当存储了“错误”的时间时,您无法再确定您正在读取的行是在时间更改之前还是之后。您可以在时钟跳过一小时(DST 开始,一小时“丢失”)时修复问题,但不能在时钟倒退一小时时修复(DST 结束,一小时“发生两次”)。如果有另一列像 ID 一样单调增加(或几乎如此),您也许可以解决问题,但即便如此,查询也不会很有趣。 【参考方案1】:您可以使用 CASE 修复您的查询:
SELECT col1, col2,
CASE WHEN (date_col BETWEEN ... AND ...)
OR (date_col BETWEEN ... AND ...)
OR (date_col BETWEEN ... AND ...)
THEN DATEADD(HOUR, 1, date_col) ELSE date_col END AS date_col
FROM tab_name;
我还将更新现有值并修复从应用程序中保存的问题,以避免将来出现这种情况。
【讨论】:
问题是夏令时不是每年的同一天:/ @user1904766 添加更多条件(例如落后和/或未来几年)的问题在哪里?以上是关于存储在 SQL Server DB 中的 DateTime 不考虑夏令时。当我把它拉出来时,我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2005 中的内置数据库角色允许执行存储过程?
SQL SERVER 存储过程中如何使用传入的DB参数,实现跨库查询?