【问题标题】:Conversion of UTC time to LOCAL in SQL Query output在 SQL 查询输出中将 UTC 时间转换为本地时间
【发布时间】:2023-04-03 00:45:01
【问题描述】:

我正在努力处理 SQL 查询 - 一个基本的选择语句,在选择输出中具有 UTC 时间转换。我已经对此进行了大量搜索,并且通过所有这些搜索都得出了以下查询,但它似乎对我不起作用。

SELECT [Id]
      ,[BaseSource]
      ,[Source]
      ,[Output]
      ,[SessionId]
      ,[Timestamp]
      ,(SELECT DATEADD(MILLISECOND,DATEDIFF(MILLISECOND,getutcdate(),GETDATE()),[Timestamp])) as LocalTime
  FROM [MYDB].[dbo].[SystemOutput]
  ORDER BY [Timestamp] DESC

这一行是魔法应该发生的地方,但是我得到了 Timestamp 列值的完全匹配,所以根本没有发生转换:

(选择 DATEADD(MILLISECOND,DATEDIFF(MILLISECOND,getutcdate(),GETDATE()),[时间戳]))

有谁知道如何让它工作?

谢谢

【问题讨论】:

  • 这不是一个好方法。它假定您需要 SQL Server 的时区。此外,它假定 current 偏移量适用于所有值 - 在许多情况下它不是(例如,由于 DST)。你能告诉我们你真正想要做什么(它的“本地”是什么?)另外,你使用的是什么版本的 SQL Server?
  • 您好,感谢您的回复。首先,我想强调这只是为了我自己的个人/开发用途,以使我的查询和这个特定表的输出更清晰。时间戳。通常,UTC 时间的任何转换都发生在我们的应用程序级别,我绝对不会在 SQL 查询中进行日期时间转换。我要做的是从 SELECT 输出中的时间戳获取本地(或 PST 时间)。我正在使用我们的生产 SQL 2016 服务器。

标签: sql-server tsql timezone


【解决方案1】:

首先,了解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] 字段是datetimedatetime2,并且它是基于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

另外,不要被时区标识符中的“标准”一词所迷惑。该值涵盖标准时间和夏令时,适用于美国和加拿大的太平洋时区。

【讨论】:

  • 你这个人!这正是我所需要的。非常感谢!
  • @Matt Johnson-Pint - 我同意......你绝对是“大男人!”在他的一个。我希望他们在 MS 文档中使用您的解释和示例(当然,我也可能错过了)。
猜你喜欢
  • 2018-07-27
  • 1970-01-01
  • 2014-04-14
  • 2020-01-11
  • 2014-07-18
  • 2021-02-04
  • 2010-09-15
  • 2011-05-01
相关资源
最近更新 更多