微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个 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),'America/Chicago') from table_name;
    

是否有一种简单的方法可以在雪花中做到这一点,例如:

select TO_TIMESTAMP_TZ(column_name,'America/Chicago') from table_name;

解决方法

您应该可以为此使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。