TIMESTAMP
TIMESTAMP
TIMESTAMP
(也称
TIMESTAMP_LTZ
TIMESTAMP_LTZ
,Local Time Zone)是带时区的时间戳类型,精度到微秒。所有操作在当前会话时区中执行,输出结果基于服务所在时区(默认 UTC+8)。
如果不需要时区感知,可以使用
TIMESTAMP_NTZ
TIMESTAMP_NTZ
(无时区时间戳)。
语法
TIMESTAMP
TIMESTAMP_LTZ
两者等价,均表示带本地时区的时间戳。
精度与存储
| 属性 | 值 |
|---|
| 精度 | 最高微秒(μs) |
| 时区 | 带本地时区(LTZ) |
实际精度取决于写入时的时间戳精度;微秒位在当前版本通常存储为毫秒。
字面量语法
SELECT TIMESTAMP '2024-01-15 10:30:00';
-- 返回:2024-01-15 10:30:00
SELECT TIMESTAMP '2024-01-15 10:30:00.123';
-- 返回:2024-01-15 10:30:00.123(毫秒精度)
SELECT TIMESTAMP '2024-01-15 10:30:00.123456';
-- 返回:2024-01-15 10:30:00.123(微秒精度,当前版本存储到毫秒)
类型转换
字符串转 TIMESTAMP
支持多种输入格式,系统自动识别:
-- 标准格式
SELECT CAST('2024-01-15 10:30:00' AS TIMESTAMP);
-- 返回:2024-01-15 10:30:00
-- ISO 8601 格式(带 Z 表示 UTC)
SELECT CAST('2024-01-15T10:30:00Z' AS TIMESTAMP);
-- 返回:2024-01-15 18:30:00(UTC 转换为 UTC+8)
SELECT CAST(NULL AS TIMESTAMP);
-- 返回:NULL
整数(Unix 时间戳秒)转 TIMESTAMP
SELECT CAST(1705289400 AS TIMESTAMP);
-- 返回:约 2024-01-15 11:30:00(取决于时区)
TIMESTAMP 转其他类型
-- 转 DATE(时间部分截断)
SELECT CAST(TIMESTAMP '2024-01-15 10:30:00' AS DATE);
-- 返回:2024-01-15
-- 转 STRING
SELECT CAST(TIMESTAMP '2024-01-15 10:30:00' AS STRING);
-- 返回:2024-01-15 10:30:00
-- 转 Unix 时间戳(秒)
SELECT unix_timestamp(TIMESTAMP '2024-01-15 10:30:00');
-- 返回:整数(秒数,取决于时区)
常用函数
-- 当前时间戳(非确定性,每次返回不同值)
SELECT CURRENT_TIMESTAMP();
-- 计算两个时间戳相差天数
SELECT datediff(TIMESTAMP '2024-01-15 10:30:00', TIMESTAMP '2024-01-14 10:30:00');
-- 返回:1
-- 时间戳加上 1 天
SELECT TIMESTAMP '2024-01-15 10:30:00' + INTERVAL 1 DAY;
-- 返回:2024-01-16 10:30:00
NULL 处理
SELECT CAST(NULL AS TIMESTAMP);
-- 返回:NULL
SELECT CAST(NULL AS TIMESTAMP) + INTERVAL 1 DAY;
-- 返回:NULL
注意事项
- TIMESTAMP 带时区,写入和读取会受当前会话时区影响。不需要时区感知时使用
TIMESTAMP_NTZ
TIMESTAMP_NTZ
。
- ISO 8601 格式中的
Z
Z
表示 UTC,查询时会转换为当前会话时区显示。
CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP()
是非确定性函数,不能用于 TABLE_CHANGES
TABLE_CHANGES
的时间戳参数(需要字面量)。
- 时间戳减法返回 INTERVAL 对象,而非整数;如需相差秒数或天数,请使用
datediff()
datediff()
或 unix_timestamp()
unix_timestamp()
计算。
相关文档