我正在执行一些 SQL 选择查询,并希望将 UTC 日期时间列转换为本地时间,以便在查询结果中显示为本地时间。请注意,我不想通过代码进行此转换,而是在对数据库进行手动和随机 SQL 查询时进行。
最佳答案
您可以在 SQL Server 2008 或更高版本上执行以下操作:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
您还可以执行更简单的操作:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
无论你做什么,不要使用-
来减去日期,因为该操作不是原子的,并且由于日期之间的竞争条件,你有时会得到不确定的结果。系统日期时间和本地日期时间在不同时间检查(即非原子地)。
请注意,此答案未考虑夏令时。如果您想包括 DST 调整,另请参阅以下问题:
How to create Daylight Savings time Start and End function in SQL Server
关于sql - 在 select 语句中将日期时间列从 UTC 转换为本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038744/