我正在通过 Snowflake 将一堆半结构化数据 (JSON) 加载到我的数据库中。条目中的时间戳值是 javascript 时间戳,如下所示:
"time": 1621447619899
Snowflake 会自动将其转换为如下所示的时间戳变量:
53351-08-15 22:04:10.000
。
到目前为止一切都很好。但是,我认为新的时间戳是错误的。实际日期时间应在 2021 年 5 月 19 日美国东部时间下午 12 点左右。我读错了吗?是否取决于我的 Snowflake 实例所在的时区?
答案 0 :(得分:0)
问题说 Snowflake 将其转换为 "53351-08-15 22:04:10.000" 看起来不错,但对我来说不正确。
当我在 Snowflake 中尝试输入数字时,我得到了这个:
select '1621447619899'::timestamp;
-- 2021-05-19T18:06:59.899Z
这更有意义。
您需要提供更多代码或上下文以进行进一步调试 - 但如果您告诉 Snowflake 将该数字转换为时间戳,您将获得正确的时间戳。
在此处查看 Snowflake 使用的规则:
答案 1 :(得分:0)
在 SQL 中手动比较以下选项时:
with x as (
SELECT parse_json('{time:1621447619899}') as var
)
SELECT var:time,
var:time::number,
var:time::varchar::timestamp,
1621447619899::timestamp,
'1621447619899'::timestamp,
var:time::timestamp
FROM x;
看来你想要做的是执行以下:
var:time::varchar::timestamp
查看文档确实看起来 to_timestamp 正在寻找作为字符串的数字,因此您需要先转换为 varchar,然后转换为时间戳,否则您会得到所得到的。