我正在努力使用SQL查询 - 在select输出中使用UTC时间转换的基本select语句。我已经做了很多搜索,并通过所有这些已经到达以下查询,但它似乎并不适合我。
Func
这一行是神奇应该发生的地方,但我获得了Timestamp列值的精确匹配,因此根本没有发生转换:
(SELECT DATEADD(微差,DATEDIFF(微差,GETUTCDATE(),GETDATE()),时间戳))
有谁知道如何使这个工作?
由于
答案 0 :(得分:4)
首先,要了解getdate()
返回服务器的本地日期和时间 - 而不是运行查询的人。如果服务器的时区设置为UTC,那么它确实会返回UTC时间。
由于您在SQL 2016上运行,并且您要求将UTC时间转换为太平洋时间,我建议您使用内置的AT TIME ZONE
语句,如下所示:
SELECT [Id]
,[BaseSource]
,[Source]
,[Output]
,[SessionId]
,[Timestamp]
,[Timestamp] AT TIME ZONE 'UTC' AT TIME ZONE 'Pacific Standard Time' AS LocalTime
FROM [MYDB].[dbo].[SystemOutput]
ORDER BY [Timestamp] DESC
注意,上面假设[Timestamp]
字段是datetime
或datetime2
,并且它是基于UTC的值。第一个AT TIME ZONE
断言给定值是UTC,结果是datetimeoffset
。第二个AT TIME ZONE
然后从UTC转换为太平洋时间。
如果该字段已经是datetimeoffset
类型,则查询更简单:
SELECT [Id]
,[BaseSource]
,[Source]
,[Output]
,[SessionId]
,[Timestamp]
,[Timestamp] AT TIME ZONE 'Pacific Standard Time' AS LocalTime
FROM [MYDB].[dbo].[SystemOutput]
ORDER BY [Timestamp] DESC
此外,不要被“#34; Standard"”这个词弄糊涂。在时区标识符中。该值涵盖标准时间和日光时间,适用于美国和加拿大的太平洋时区。