我有一个 Timestamp_NTZ 列,我知道数据位于中部(美国/芝加哥)时区。如何在选择过程中将其转换为 Timestamp_TZ 格式。
由于夏令时不同的偏移量,我不能只是转换为 varchar 并添加时区偏移量并返回到 timestamp_tz。
我发现了以下两种方法,但它们涉及更多的代码/键入。寻找优雅的解决方案。
将会话更改为所需的时区并使用 TO_TIMESTAMP_TZ() 函数。这种方法的缺点是它有两个单独的查询,并且不能在以所有者身份运行的存储过程中使用。
alter session set timezone = 'America/Chicago';
select TO_TIMESTAMP_TZ(column_name) from table_name;
使用 TIMESTAMP_TZ_FROM_PARTS 函数。这涉及到更多的输入并且看起来很复杂。
select TIMESTAMP_TZ_FROM_PARTS(Year(column_name), Month(column_name), Day(column_name), Hour(column_name), Minute(column_name), Second(column_name), 0, 'America/Chicago') from table_name;
是否有一种简单的方法可以在雪花中做到这一点,例如:
select TO_TIMESTAMP_TZ(column_name, 'America/Chicago') from table_name;
答案 0 :(得分:0)
您应该可以为此使用 CONVERT_TIMEZONE。正如您在评论中提到的,2 参数版本不期望 TIMESTAMP_TZ
。您可以在下面看到我为了演示目的传入了一个 TIMESTAMP_NTZ
,但如果需要,您也可以传入一个像 2020-01-27T08:00:00Z
这样的字符串:
select CONVERT_TIMEZONE( 'America/Chicago' , TO_TIMESTAMP_NTZ('2020-01-27T08:00:00Z'));
以上返回
2021-01-26 02:00:00.000000000 -06:00