TIMESTAMP_NTZ

概述

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

语法

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:一个至少包含四位数字的年份。
  • [M]M:介于 01 和 12 之间的一位数或两位数的月份。
  • [d]d:介于 01 和 31 之间的一位数或两位数的日期。
  • H[H]:介于 00 和 23 之间的一位数或两位数的小时。
  • m[m]:介于 00 和 59 之间的一位数或两位数的分钟。
  • s[s]:介于 00 和 59 之间的一位数或两位数的秒。
  • [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                                           |
+---------------------------------------------+

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