在雪花数据库中将 timestamp_ntz 转换为 timestamp_tz 的最简单方法

时间:2021-01-26 02:30:18

标签: snowflake-cloud-data-platform timestamp-with-timezone

我有一个 Timestamp_NTZ 列,我知道数据位于中部(美国/芝加哥)时区。如何在选择过程中将其转换为 Timestamp_TZ 格式。

由于夏令时不同的偏移量,我不能只是转换为 varchar 并添加时区偏移量并返回到 timestamp_tz。

我发现了以下两种方法,但它们涉及更多的代码/键入。寻找优雅的解决方案。

  1. 将会话更改为所需的时区并使用 TO_TIMESTAMP_TZ() 函数。这种方法的缺点是它有两个单独的查询,并且不能在以所有者身份运行的存储过程中使用。

    alter session set timezone = 'America/Chicago';
    select TO_TIMESTAMP_TZ(column_name) from table_name;
    
  2. 使用 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;

1 个答案:

答案 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

相关问题