sql - 在 select 语句中将日期时间列从 UTC 转换为本地时间

标签 sql sql-server

我正在执行一些 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/

相关文章:

sql - 选择大于 0 的值的计数 SQL Server

sql - 我如何在 T-SQL 2005 中旋转过去 12 个月?

sql - Oracle 修剪字符串内部的空格

c# - 使用 Entity Framework 代码优先方法创建序列的最简单方法是什么?

多个数据库条目的 SQL 更新

mysql - 如何将此条件转换为查询

SQL:使用一个表中的数据将新数据插入到另一个表中

mysql - SQL:假设,如果将不合适的数字添加到唯一标识符列,会发生什么情况?

MySQL 更改表的语句失败

sql-server - 如何在 WiX 安装程序中检测 SQL Server Express