TIMESTAMP_NTZ

概述

timestamp_ntz即timestamp without time zone 是一种数据库数据类型,用于存储不包含时区信息的日期和时间值。这意味着存储的时间值是绝对的,不考虑时区的变化。无论用户在哪个时区,timestamp without time zone 类型的字段显示的时间都是一样的,使用 timestamp without time zone 类型时,通常需要应用程序或用户自己来管理时区转换,因为数据库不会自动处理时区信息。这种类型适用于那些不需要考虑时区差异的场景。timestamp_ntz等效于Mysql中的datetime。

语法

TIMESTAMP_NTZ

说明

timestamp_ntz
timestamp_ntz
类型当前支持 JDBC 客户端版本 1.4.0 及以上的 JDBC JAR 包

timestamp_ntz常量格式

TIMESTAMP_NTZ timestampString { 'yyyy[...]' | 'yyyy[...]-[M]M' | 'yyyy[...]-[M]M-[d]d' | 'yyyy[...]-[M]M-[d]d ' | 'yyyy[...]-[M]M-[d]d[T][H]H[:]' | 'yyyy[..]-[M]M-[d]d[T][H]H:[m]m[:]' | 'yyyy[...]-[M]M-[d]d[T][H]H:[m]m:[s]s[.]' | 'yyyy[...]-[M]M-[d]d[T][H]H:[m]m:[s]s.[ms][ms][ms][us][us][us]' }

  • yyyy
    yyyy
    :一个至少包含四位数字的年份。
  • [M]M
    [M]M
    :介于 01 和 12 之间的一位数或两位数的月份。
  • [d]d
    [d]d
    :介于 01 和 31 之间的一位数或两位数的日期。
  • H[H]
    H[H]
    :介于 00 和 23 之间的一位数或两位数的小时。
  • m[m]
    m[m]
    :介于 00 和 59 之间的一位数或两位数的分钟。
  • s[s]
    s[s]
    :介于 00 和 59 之间的一位数或两位数的秒。
  • [ms][ms][ms][us][us][us]
    [ms][ms][ms][us][us][us]
    :秒最多 6 位小数。

SELECT TIMESTAMP_NTZ'2020-12-31'; +---------------------------+ | TIMESTAMP_NTZ'2020-12-31' | +---------------------------+ | 2020-12-31 00:00:00 | +---------------------------+ SELECT TIMESTAMP_NTZ'2021-7-1T8:43:28.123456' as res; +----------------------------+ | res | +----------------------------+ | 2021-07-01 08:43:28.123456 | +----------------------------+ SELECT TIMESTAMP_NTZ'2021-7-1 8:43:28.123456' as res; +----------------------------+ | res | +----------------------------+ | 2021-07-01 08:43:28.123456 | +----------------------------+

如果输入的字符串中的格式则会转化为timestmap

timestamp_ntz和timestamp_ltz的区别

timestamp_ntz(没有时区的时间戳): 这种类型的时间戳记录的是“墙上时钟”时间,即不考虑任何时区信息的时间。所有的操作都是在没有考虑时区的情况下进行的。如果输出格式包含时区,将显示UTC指示符(Z)。这意味着,无论你在世界上的哪个地方,timestamp_ntz记录的时间都是相同的。

timestamp_ltz(本地时区的时间戳): 这种类型的时间戳在内部存储UTC时间,并根据当前会话的时区进行所有操作。这意味着,当你查询一个timestamp_ltz类型的字段时,你看到的时间将是转换为你当前会话时区的时间。这使得在全球分布的系统中工作时,用户可以看到转换为他们本地时区的时间。

如下所示:本地客户端的时区为utc+00区。timestamp_ltz会根据字符输入的时区进行转化内部存储UTC时间,由于客户端也在utc+00区,所以查出来会转化为utc+00时间。而timestamp_ntz不考虑任何时区所以客户端在任何时区查出来都是该时间

SELECT timestamp_ltz'2022-03-30 06:00:00+08',timestamp_ntz'2022-03-30 06:00:00+08'; +---------------------------------------+---------------------------------------+ | timestamp_ltz'2022-03-30 06:00:00+08' | timestamp_ntz'2022-03-30 06:00:00+08' | +---------------------------------------+---------------------------------------+ | 2022-03-29 22:00:00 | 2022-03-30 06:00:00 | +---------------------------------------+---------------------------------------+

约束限制

  • 不支持python sdk写入timestamp_ntz

具体案例

  1. 将timestmap_ntz转化为timestmap_ltz

SELECT cast(timestamp_ntz'2022-03-30 06:00:00' as timestamp_ltz); +-------------------------------------------------------+ | CAST(timestamp_ntz'2022-03-30 06:00:00' AS timestamp) | +-------------------------------------------------------+ | 2022-03-30 06:00:00 | +-------------------------------------------------------+

  1. 将timestmap_lt转化为timestmap_ntz

SELECT cast(timestamp_ltz'2022-03-30 06:00:00+08' as timestamp_ntz); +--------------------------------------------------------------+ | CAST(timestamp_ltz'2022-03-30 06:00:00+08' AS timestamp_ntz) | +--------------------------------------------------------------+ | 2022-03-30 06:00:00 | +--------------------------------------------------------------+

  1. 建表时使用timestamp_ntz字段数据类型

CREATE TABLE timestamp_wihtout_timezone (col timestamp_ntz);

  1. 插入timestamp_ntz类型数据

INSERT INTO timestamp_wihtout_timezone VALUES (timestamp_ntz '2022-03-30 06:00:00');

  1. 使用函数处理

SELECT year(timestamp_ntz '2022-03-30 06:00:00'); +--------------------------------------------+ | `year`(timestamp_ntz'2022-03-30 06:00:00') | +--------------------------------------------+ | 2022 | +--------------------------------------------+ SELECT month(timestamp_ntz '2022-03-30 06:00:00'); +---------------------------------------------+ | `month`(timestamp_ntz'2022-03-30 06:00:00') | +---------------------------------------------+ | 3 | +---------------------------------------------+

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