TIMESTAMP_NTZ

TIMESTAMP_NTZ
TIMESTAMP_NTZ
(timestamp without time zone)存储不含时区信息的日期时间值。无论查询时会话处于哪个时区,读出的值始终是写入时的原始时间,不做任何转换。

TIMESTAMP
TIMESTAMP
(即
TIMESTAMP_LTZ
TIMESTAMP_LTZ
)的区别:
TIMESTAMP
TIMESTAMP
内部以 UTC 存储,查询时转换为会话时区显示;
TIMESTAMP_NTZ
TIMESTAMP_NTZ
不存储时区,写入什么显示什么。适合记录"本地时间"语义的事件,如日志时间戳、排班时间等。

语法

类型声明

TIMESTAMP_NTZ

字面量

TIMESTAMP_NTZ 'yyyy-[M]M-[d]d [T][H]H:[m]m:[s]s[.ffffff]'

  • 日期部分必填,时间部分可省略(默认
    00:00:00
    00:00:00
  • 支持
    T
    T
    或空格作为日期时间分隔符
  • 秒最多 6 位小数(微秒精度)
  • 字面量中的时区偏移(如
    +08
    +08
    )会被忽略,直接取时间部分存储

示例

字面量与基本查询

SELECT TIMESTAMP_NTZ'2024-03-15'; -- 返回:2024-03-15 00:00:00 SELECT TIMESTAMP_NTZ'2024-03-15 14:30:45.123456'; -- 返回:2024-03-15 14:30:45.123456 SELECT TIMESTAMP_NTZ'2024-03-15T14:30:45'; -- 返回:2024-03-15 14:30:45

建表与写入数据

CREATE TABLE doc_ntz_test ( id INT, event_time TIMESTAMP_NTZ ); INSERT INTO doc_ntz_test VALUES (1, TIMESTAMP_NTZ'2024-03-15 09:00:00'), (2, TIMESTAMP_NTZ'2024-03-15 17:30:00'), (3, TIMESTAMP_NTZ'2024-03-16 08:00:00');

提取日期部分

SELECT id, event_time, date(event_time) AS event_date, hour(event_time) AS event_hour FROM doc_ntz_test ORDER BY id;

结果:

idevent_timeevent_dateevent_hour
12024-03-15 09:00:002024-03-159
22024-03-15 17:30:002024-03-1517
32024-03-16 08:00:002024-03-168

时间运算

SELECT TIMESTAMP_NTZ'2024-03-15 14:30:45' + INTERVAL 1 DAY; -- 返回:2024-03-16 14:30:45 SELECT TIMESTAMP_NTZ'2024-03-15 14:30:45' - INTERVAL 2 HOUR; -- 返回:2024-03-15 12:30:45

与 TIMESTAMP 的对比

SELECT TIMESTAMP_LTZ'2024-06-15 08:00:00+08' AS ltz_val, TIMESTAMP_NTZ'2024-06-15 08:00:00+08' AS ntz_val;

结果(会话时区 UTC+8):

ltz_valntz_val
2024-06-15 08:00:002024-06-15 08:00:00

类型转换

-- TIMESTAMP_NTZ → TIMESTAMP(NTZ 值被视为会话时区的本地时间,而非 UTC) SELECT CAST(TIMESTAMP_NTZ'2024-06-15 08:00:00' AS TIMESTAMP); -- 返回(UTC+8 会话):2024-06-15 08:00:00 -- TIMESTAMP → TIMESTAMP_NTZ(先将 LTZ 转为会话时区,再以该值存入 NTZ) SELECT CAST(TIMESTAMP'2024-06-15 08:00:00+08' AS TIMESTAMP_NTZ); -- 返回:2024-06-15 08:00:00 -- TIMESTAMP_NTZ → DATE(截断时间部分) SELECT CAST(TIMESTAMP_NTZ'2024-03-15 14:30:00' AS DATE); -- 返回:2024-03-15 -- DATE → TIMESTAMP_NTZ(时间部分补零) SELECT CAST(DATE'2024-03-15' AS TIMESTAMP_NTZ); -- 返回:2024-03-15 00:00:00

注意事项

  • TIMESTAMP_NTZ
    TIMESTAMP_NTZ
    不存储时区,字面量中的时区偏移(
    +08
    +08
    Z
    Z
    )会被忽略,直接取时间部分。
  • 不支持 Python SDK 写入
    TIMESTAMP_NTZ
    TIMESTAMP_NTZ
    ;需要 JDBC 客户端 1.4.0 及以上版本。
  • TIMESTAMP_NTZ
    TIMESTAMP_NTZ
    不能用作
    TABLE_CHANGES
    TABLE_CHANGES
    的时间参数(该参数只接受
    TIMESTAMP_LTZ
    TIMESTAMP_LTZ
    )。
  • TIMESTAMP_LTZ
    TIMESTAMP_LTZ
    互转时注意语义:
    NTZ→LTZ
    NTZ→LTZ
    将 NTZ 的值视为会话时区的本地时间(不是 UTC)进行转换;
    LTZ→NTZ
    LTZ→NTZ
    先将 LTZ 转换为会话时区,然后以该值直接存入 NTZ。

相关文档

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