【问题标题】:How to insert a time-zoned converted Timestamp into a table?如何将时区转换时间戳插入表中?
【发布时间】:2022-01-22 11:13:43
【问题描述】:

如何将我的时间戳设置为特定时区,尤其是美国/太平洋地区?

考虑一下这个 MWE:

CREATE TABLE #timingTable (theTime datetime2(0))

INSERT INTO #timingTable 
    SELECT (SELECT CURRENT_TIMESTAMP);

SELECT * FROM #timingTable;

【问题讨论】:

  • datetime2 不存储时区信息,您需要一个datetimeoffset
  • 什么是“MWE”顺便说一句?

标签: sql sql-server tsql


【解决方案1】:

您可以使用 SYSDATETIMEOFFSET 获取带有偏移量的当前时间,然后使用 AT TIME ZONE 将其转换为您想要存储日期时间的时区。

CREATE TABLE #timingTable (theTime datetime2(0))

INSERT INTO #timingTable SELECT SYSDATETIMEOFFSET() AT TIME ZONE 'Pacific Standard Time';

select * from #timingTable;

【讨论】:

  • 您将无法在存储后再次检索时区?
  • datetime2 缺少时区信息。甚至datetimeoffset 也缺少时区;它只有偏移量,可能来自多个时区。
  • 就个人而言,我默认使用 datetimeoffset 作为任何日期时间列的类型,并确定客户端的本地时间。所以我永远不会做上述事情,但我不知道 OP 的用例。
【解决方案2】:
(SELECT CURRENT_TIMESTAMP AT TIME ZONE 'Pacific Standard Time'); 

我会阅读these docs,看看它是否有助于澄清。

【讨论】:

猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 2019-03-09
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多