Ssrs

AT TIME ZONE 會自動處理 DST 轉換嗎?

  • January 18, 2017

我必須為某些報告轉換 UTC 日期。我們使用的是 SQL Server 2016,我所有的報告查詢都是 SP,所以我能夠做到這一點:

SELECT MyDateTime AT TIME ZONE 'Pacific Standard Time' AS 'MyLocalDateTime'

這將返回預期值,但我無法確定這在夏令時是否仍然有效。

通過查詢時區資訊 DMV:

select * from sys.time_zone_info

我看到有一列“Is DST”,所以我假設伺服器正在跟踪它。那麼我可以安全地假設 sql server 會在 DST 期間根據需要調整時間嗎?

是的,它說明了這一點:

AT TIME ZONE應用特定規則來轉換 smalldatetime、datetime 和 datetime2 數據類型中的輸入值,這些數據類型屬於受 DST 更改影響的區間

根據有關表達式的MSDN 文章。sys.time_zone_info列提供有關該區域目前是否處於 DST 的資訊,但上面的文章表明規則考慮了給定特定日期時間值的 DST。

例子:

/*------------------------
SELECT SYSUTCDATETIME() AT TIME ZONE 'Eastern Standard Time';
------------------------*/

----------------------------------
2017-01-18 22:18:12.3789253 -05:00

當我們嘗試使用具有不同 DST 偏移量的日期時:

/*------------------------
SELECT CAST('2017-07-18' AS DATETIME) AT TIME ZONE 'Eastern Standard Time';
------------------------*/

----------------------------------
2017-07-18 00:00:00.000 -04:00

它分配一個不同的 DST 偏移值,知道日期是否屬於 DST。

引用自:https://dba.stackexchange.com/questions/161537