Ssrs
AT TIME ZONE 會自動處理 DST 轉換嗎?
我必須為某些報告轉換 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。