正如我们所知,我们在雪花中有 3 个时间戳,
- TIMESTAMP_NTZ
- TIMESTAMP_LTZ
- TIMESTAMP_TZ
因此,在将时间戳写入雪花表时,默认情况下需要TIMESTAMP_NTZ。 雪花在写入雪花表时如何获取 CST 时区的时间戳?
首先,重要的是要知道哪个时区被设置为您的帐户/会话的默认时区:
SHOW PARAMETERS LIKE 'TIMEZONE';
然后将会话的默认值更改为 CST
ALTER SESSION SET TIMEZONE = 'America/Chicago';
此后,任何选择current_timestamp都将在正确的时区提供数据
SELECT CURRENT_TIMESTAMP;
这是一篇很好的参考文章: 雪花时间戳数据类型参考
假设您可以控制表中的精确列类型,我发现TIMESTAMP_TZ是您想要定义表的方式。这是我所做的一切的工作示例:
alter session set timezone = 'America/Los_Angeles';
create or replace table ts_test(rn number, ts timestamp_tz);
insert into ts_test values(1, current_timestamp());
insert into ts_test values(2, '2019-12-10 07:50:00 -06:00');
insert into ts_test values(3, CONVERT_TIMEZONE('America/Chicago', CURRENT_TIMESTAMP()));
select * from ts_test;
如果时间戳是在代码中生成的,请确保在插入时包含 UTC 偏移量 (RN 2(。 如果您使用的是 current_timestamp(( 即 LA,请确保转换为 CST (rn 3(。
如果正在生成表,并且您不控制时区默认值,请先发出以下命令:
alter session set timestamp_type_mapping = timestamp_tz;