Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 存储在SQL Server DB中的日期时间不考虑夏令时。当我把它拔出来的时候,我怎么能把它修好?_Sql Server_Datetime_Dst - Fatal编程技术网

Sql server 存储在SQL Server DB中的日期时间不考虑夏令时。当我把它拔出来的时候,我怎么能把它修好?

Sql server 存储在SQL Server DB中的日期时间不考虑夏令时。当我把它拔出来的时候,我怎么能把它修好?,sql-server,datetime,dst,Sql Server,Datetime,Dst,我无法控制EST中日志日期时间的机器。它不会切换到夏令时。当我取出数据时,我所有的报告都会被一个小时搞砸。有没有办法在我的查询中解决这个问题?使用SQL Server 2014。您可以通过使用案例修复查询: SELECT col1, col2, CASE WHEN (date_col BETWEEN ... AND ...) OR (date_col BETWEEN ... AND ...) OR (date_col BETWEEN .

我无法控制EST中日志日期时间的机器。它不会切换到夏令时。当我取出数据时,我所有的报告都会被一个小时搞砸。有没有办法在我的查询中解决这个问题?使用SQL Server 2014。

您可以通过使用案例修复查询:

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;

我还将更新现有值并修复应用程序中的保存,以避免将来出现这种情况。

问题是,当存储了“错误”的时间时,您无法再确定所读取的行是来自时间更改之前还是之后。当时钟跳过一个小时(DST开始,一个小时“丢失”)时,您可以修复问题,但当时钟返回一个小时(DST结束,一个小时“发生两次”)时,则无法修复问题。如果有另一列像ID一样单调递增(或几乎如此)的话,你也许能够解决问题,但即使如此,对该列的查询也不会有趣。问题是DST不是每年都在同一个日期:/@user1904766,那么在后面和/或前面几年添加更多条件的问题在哪里?