输入的日期或时间字面量必须用单引号括起来。可接受几乎任何合理格式的输入,包括符合 ISO 8601 和 SQL 标准、传统的 POSTGRES 和其他格式。
Vertica 可以在 SQL 标准要求之上更灵活地处理日期/时间输入。日期/时间表达式 中说明了日期/时间输入和已识别文本字段(包括月份、星期和时区)的精确解析规则。
输入的日期或时间字面量必须用单引号括起来。可接受几乎任何合理格式的输入,包括符合 ISO 8601 和 SQL 标准、传统的 POSTGRES 和其他格式。
Vertica 可以在 SQL 标准要求之上更灵活地处理日期/时间输入。日期/时间表达式 中说明了日期/时间输入和已识别文本字段(包括月份、星期和时区)的精确解析规则。
Vertica 尝试与时区的 SQL 标准定义兼容。但是,SQL 标准的日期和时间类型与功能组合较为怪异。存在以下明显问题:
虽然 DATE 类型不含关联时区,但 TIME/TIMETZ 类型可以包含关联时区。除非与日期和时间相关联,否则时区在现实世界中几乎没有任何意义,因为偏移量在一年当中会随夏令时边界的变化而变化。
Vertica 假设本地时区适用于任何仅包含日期或时间的数据类型。
默认时区指定为相对于 UTC 的偏移量常数。因此,在跨 DST 边界进行日期/时间算术时,不可能适应夏令时。
为了克服这些困难,Micro Focus 建议您在使用时区时使用包含日期和时间的日期/时间类型。Micro Focus 建议您不要使用类型 TIME WITH TIME ZONE,
,即使它支持传统应用程序且符合 SQL 标准也不例外。
时区和时区约定不仅仅受地球几何形状的影响,还会受政治决策的影响。1900 年代,全球时区开始趋于标准化,但仍然会面临一些随机变化,特别是夏令时规则方面。
Vertica 目前支持从 1902 年到 2038 年这个时间段确立的夏令时规则,对应于完整传统 UNIX 系统时间。一旦时间超出该范围,则视为所选时区的“标准时间”,无论该时间处于一年当中的哪个时段。
系统将以下标记识别为星期几的名称:
系统将以下标记识别月份名称:
表示时间跨度的字面量。
[ @ ] [-] { quantity subtype-unit }[...] [ AGO ]
不同的单位数量会自动叠加。
间隔常量的上下限分别为:
9223372036854775807 usec
到 ‑9223372036854775807 usec
296533 years 3 mons 21 days 04:00:54.775807
到 ‑296533 years ‑3 mons ‑21 days ‑04:00:54.775807
间隔常量的范围是
+/– 263 – 1
微秒。
在 Vertica 中,间隔字段可以增加,允许大浮点数。
请参阅指定间隔输入。
下表列出了可在间隔字面量中指定的子类型单位,分为以下几个主要类别:
Vertica 根据上下文将输入单位 m
解释为月份或分钟。例如,以下命令可创建包含间隔值的单列表:
=> CREATE TABLE int_test(i INTERVAL YEAR TO MONTH);
在以下 INSERT 语句中,Vertica 将间隔字面量 1y 6m
解释为 1 年 6 个月:
=> INSERT INTO int_test VALUES('1y 6m');
OUTPUT
--------
1
(1 row)
=> COMMIT;
COMMIT
=> SET INTERVALSTYLE TO UNITS;
SET
=> SELECT * FROM int_test;
i
-----------------
1 year 6 months
(1 row)
以下 ALTER TABLE 语句可将 DAY TO MINUTE
间隔列添加到表 int_test
中:
=> ALTER TABLE int_test ADD COLUMN x INTERVAL DAY TO MINUTE;
ALTER TABLE
下一个 INSERT 语句将第一列和第二列分别设置为 3y 20m 和 1y 6m。在这种情况下,Vertica 通过以下两种方式解释 m
输入字面量:
对于第 i 列,Vertica 将 m
输入解释为月份,显示 4 年 8 个月。
对于第 x 列,Vertica 将 m
输入解释为分钟。由于间隔定义为 DAY TO MINUTE,因此将插入的输入值 1y 6m
转换为 365 天 6 分钟:
=> INSERT INTO int_test VALUES ('3y 20m', '1y 6m');
OUTPUT
--------
1
(1 row)
=> SELECT * FROM int_test;
i | x
------------------+-----------------
1 year 6 months |
4 years 8 months | 365 days 6 mins
(2 rows)
指定如何解释输出的间隔字面量并为其设置格式,同时可选择性设置精度。间隔限定符由一或两个单元组成:
unit [ TO unit ] [ (p) ]
其中:
单位指定天-时间或年-月子类型。
p 指定精度,0 到 6 之间的整数。
精度仅适用于 SECOND 单位,指定在秒值小数点后显示的小数位数。SECOND 的默认精度为 6。
当 SECOND 为限定符的秒单位时(例如,DAY TO SECOND 或 MINUTE TO SECOND),精度为小数点前 2 位。
例如:
=> SELECT INTERVAL '6 122.538987' MINUTE TO SECOND (5);
?column?
-------------
08:02.53899
(1 row)
有关详细信息,请参阅指定时间间隔精度。
如果间隔省略了间隔限定符,则默认值为 DAY TO SECOND(6)
。
间隔限定符分为以下两个类别:
Vertica 还支持 INTERVALYM
,它是 INTERVAL YEAR TO MONTH
的别名。因此,以下两个语句是等效的:
=> SELECT INTERVALYM '1 2';
?column?
----------
1-2
(1 row)
=> SELECT INTERVAL '1 2' YEAR TO MONTH;
?column?
1-2
(1 row)
请参阅控制间隔格式。