在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 |
+-------------------------------+