雪花云数据平台如何使用时区名称从timestamp_ntz构造timestamp_tz



在Snowflake中,我如何将时区名称与timestone_ntz字段组合以创建timestamp_tz值?

在Oracle中是:

SELECT from_tz(<timestamp_col>, <timezone_name>) 
FROM <my_table>;

我所见过的所有Snowflake示例似乎都要求我以小时和/或设置会话参数的形式指定时区作为偏移量。

我不想以小时为单位指定时区偏移量。我不希望使用会话参数,因为我想在字段/记录级别控制加载,而不是会话级别。

我认为这一行的东西是我想要的,但似乎一定有更好的方法:

SELECT convert_timezone('Europe/London', 'Europe/London', <timestamp_ntz_col>);

我也知道timestamp_tz_from_parts()函数,但这似乎有点"重"。

有更简单的方法吗?

我也知道timestamp_tz_from_parts()函数,但是看起来有点"重"。

我不认为它很重,你可以创建自己的函数来减少主查询的复杂性:

create or replace function mergetz( ts varchar, tz varchar ) 
returns timestamp_tz as
$$
TIMESTAMP_TZ_FROM_PARTS(
YEAR( ts::date ),
MONTH( ts::date ),
DAY( ts::date ),  
HOUR( ts::datetime ),    
MINUTE( ts::datetime ),    
SECOND( ts::datetime ),
0, -- nanoseconds
tz ) 
$$
;
SELECT mergetz( ts, tz) 
from values 
('2019-01-01 12:00:00','America/New_York'),
('2019-01-01 12:15:00','Europe/London') tmp (ts, tz );
+-------------------------------+
|       MERGETZ( TS, TZ)        |
+-------------------------------+
| 2019-01-01 12:00:00.000 -0500 |
| 2019-01-01 12:15:00.000 +0000 |
+-------------------------------+

最新更新