Snowflake中可读日期/时间转Unix时间戳及时区问题咨询
解答
1. 将日期/日期时间转换为Unix时间戳
Snowflake提供了TO_UNIXTIME()函数,作为TO_TIMESTAMP()的反向操作,可直接将日期、日期时间类型的值转换成Unix时间戳(即从1970-01-01 00:00:00 UTC开始累计的秒数)。
针对你的两列数据,具体用法如下:
- 处理
last_used(带时分的日期时间列):
SELECT TO_UNIXTIME(last_used) AS last_used_unix FROM your_table;
- 处理
date(仅日期列):
SELECT TO_UNIXTIME(date) AS date_unix FROM your_table;
注:传入纯日期值时,Snowflake会默认将时间部分补为00:00:00后再转换。
2. Unix时间戳的时区感知问题
Unix时间戳本身是无时区属性的,它本质是UTC纪元起点到目标时间的秒数,代表UTC时间线上的一个绝对节点。但在Snowflake的转换逻辑中需要注意两点:
- 如果输入列是不带时区的类型(比如
TIMESTAMP_NTZ或DATE),Snowflake会使用当前会话的时区将其转换为UTC时间,再计算Unix时间戳。 - 如果输入列是带时区的类型(比如
TIMESTAMP_TZ),Snowflake会直接基于列自带的时区信息转换为UTC时间,再生成对应的Unix时间戳。
举个实际场景:若会话时区设为Asia/Shanghai,你输入的last_used是2023-12-01 20:24(TIMESTAMP_NTZ类型),Snowflake会先把这个时间识别为上海时区的时间,转成UTC的2023-12-01 12:24,再计算对应的Unix时间戳。
内容的提问来源于stack exchange,提问作者baddy
相关产品推荐
相关产品推荐

