如何解决在雪花数据库中将 timestamp_ntz 转换为 timestamp_tz 的最简单方法
我有一个 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),'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 举报,一经查实,本站将立刻删除。