我正在执行一些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
无论您做什么, 都不要 使用-减法日期,因为该操作不是原子操作,并且由于系统日期时间与本地日期时间在不同时间(即非原子方式)之间的竞争状况,有时您会获得不确定的结果。
-