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()
    计算。

相关文档

联系我们
预约咨询
微信咨询
电话咨询