小编典典

在 select 语句中将 Datetime 列从 UTC 转换为本地时间

all

我正在执行一些 SQL 选择查询,并希望将我的 UTC
日期时间列转换为本地时间,以便在我的查询结果中显示为本地时间。请注意,我不希望通过代码进行此转换,而是在对我的数据库进行手动和随机 SQL 查询时。


阅读 79

收藏
2022-05-12

共1个答案

小编典典

您可以在 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。如果您想包含 DST 调整,另请参阅以下 SO 问题:

如何在 SQL Server
中创建夏令时开始和结束函数

2022-05-12