当前位置: 首页 > 知识库问答 >
问题:

如何在 SQL Server 中将本地 (est) 列时区转换为 UTC 时区

诸葛砚
2023-03-14

我们在本地时区(如EST、PST、CST等)的sql中有多列。我们希望将UTC时区中的所有这些时区转换为考虑到日光节省并将其保存到另一列。

我尝试了下面的查询,但它将UTC转换为当地时区(EST ),但我正在寻找EST到UTC时区。

选择CONVERT(日期时间,SWITCHOFFSET(日期时间字段,日期部分(TZOFFSET,时间区域“东部标准时间”的日期时间字段))

共有1个答案

董霖
2023-03-14

根据上面的评论,你应该能够使用下面的例子来得到你想要的。

DECLARE @ts DATETIME = GETDATE();

SELECT
    @ts AT TIME ZONE 'Pacific Standard Time',
    @ts AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'UTC',
    CAST(@ts AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'UTC' AS DATETIME)

我在这里展示的是各个步骤。反过来:

  1. 获取任意datetime值。这很容易成为您表中的一列。
  2. 告诉SQL"此日期时间在PST时区"
  3. 告诉SQL"将此PST时间转换为UTC时间"
  4. 将生成的UTC时间转换回datetime(大概这样它就可以插入回表中)

为了明确说明“如果我想转换表中的数据,这会是什么样子?”,它看起来像这样:

alter table dbo.yourTable add 
   isConverted bit
   constraint DF_yourTable_isConverted default 0;

update top(1000) dbo.yourTable
set yourColumn = CAST(
      yourColumn AT TIME ZONE 'Pacific Standard Time' AT TIME ZONE 'UTC' 
      AS DATETIME
   ),
   isConverted = 1
where isConverted = 0;

请注意,我添加了一个列,其目的是提供“此特定行的列是否已转换?”的概念,因此您不会意外地将给定值重复转换两次。一旦表中的所有数据都被转换,您就可以删除该列。

 类似资料:
  • 我是PostgreSQL的新手,我想知道是否有一种直接的方法可以使用函数将表中的时间戳值转换为不同的时区。在我的情况下,是UTC到EST。 例如,我需要将这些值转换为EST(不仅仅是一个值,而是表中的所有值)

  • 问题内容: 我知道这个主题已被殴打致死,但在搜寻了这个问题几个小时之后,我不得不问。 我的问题:根据客户端应用程序(iphone)的当前时区对服务器上的日期进行计算。客户端应用程序以秒为单位告诉服务器,其时区距GMT的距离。然后,我想使用此信息对服务器中的日期进行计算。服务器上的日期都存储为UTC时间。 因此,在将UTC日期对象转换为该本地时区之后,我想获取其HOUR。 我目前的尝试: 变量小时和

  • 问题内容: 我有一个UTC时区,例如: 还有一个pytz时区对象: 转换为给定时区的正确方法是什么? 问题答案: 我想我明白了: 这行代码首先将朴素的(不了解时区的) 对象转换为包含时区(UTC)的对象。然后,它使用该功能根据请求的时区调整时间。

  • 问题内容: 我对Java中的时区感到好奇。我想从设备获取UTC时间(以毫秒为单位)并发送到服务器。当服务器向用户显示时间时,服务器会将其转换为本地时区。我系统中的时区是澳大利亚/悉尼(UTC + 11:00),测试时区时,我得到的结果如下: 输出: 我以为我可以为c2安排13/01/2014 00:12:00,因为UTC时间比我的时间晚11个小时。日历不能按我期望的方式工作吗? 您的帮助将不胜感激

  • 我对Java的时区很好奇。我想从设备上获取以毫秒为单位的UTC时间并发送到服务器。服务器在向用户显示时间时会将其转换为本地时区。我系统中的时区是澳大利亚/悉尼(UTC 11:00),当我测试时区时,我得到了下面的结果: 输出: 我以为我可以有 13/01/2014 00:12:00 对于 c2,因为 UTC 时间比我的晚 11 小时。日历没有按照我预期的方式工作吗? 非常感谢你的帮助。 添加z以显

  • 问题内容: 我从我的API获取此日期字符串: 但是此日期为UTC格式,我想将其转换为当地时间,该怎么办? 我尝试了这个: 但是它返回了这个错误: 问题答案: 您的日期格式模式错误。改成: 有关更多信息,请参见SimpleDateFormat的javadoc。