指定间隔输入
间隔值通过字面量类时间间隔表示。字面量类时间间隔由一个或多个间隔字段组成,其中每个字段代表天和时间或年和月的时间范围,如下所示:
[-] { quantity subtype-unit }[...] [AGO]
使用子类型单位
子类型单位对于天-时间间隔是可选的;而对于年-月间隔则必须指定。
例如,下面的第一个语句隐式指定了天和时间;第二个语句显式标识天和时间单位。两个语句都返回相同的结果:
=> SET INTERVALSTYLE TO UNITS;
=> SELECT INTERVAL '1 12:59:10:05';
?column?
--------------------
1 day 12:59:10.005
(1 row)
=> SELECT INTERVAL '1 day 12 hours 59 min 10 sec 5 milliseconds';
?column?
--------------------
1 day 12:59:10.005
(1 row)
以下两个语句分别将 28 天和 4 周添加到当前日期。两种情况下的间隔相等,并且语句返回相同的结果。但是,在第一个语句中,字面量类时间间隔省略了子类型(隐式 days
);在第二个语句中,字面量类时间间隔必须包含子类型单位 weeks
:
=> SELECT CURRENT_DATE;
?column?
------------
2016-08-15
(1 row)
=> SELECT CURRENT_DATE + INTERVAL '28';
?column?
---------------------
2016-09-12 00:00:00
(1 row)
dbadmin=> SELECT CURRENT_DATE + INTERVAL '4 weeks';
?column?
---------------------
2016-09-12 00:00:00
(1 row)
字面量类时间间隔可以包括天-时间和年-月字段。例如,以下语句将 4 年、4 周、4 天和 14 小时的间隔添加到当前日期。年和周字段必须包含子类型单位;天和小时字段则将其省略:
> SELECT CURRENT_DATE + INTERVAL '4 years 4 weeks 4 14';
?column?
---------------------
2020-09-15 14:00:00
(1 row)
省略子类型单位
您可以指定天、小时、分钟和秒的数量,无需指定单位。Vertica 将字面量类时间间隔中的冒号识别为时间戳的一部分:
=> SELECT INTERVAL '1 4 5 6';
?column?
------------
1 day 04:05:06
=> SELECT INTERVAL '1 4:5:6';
?column?
------------
1 day 04:05:06
=> SELECT INTERVAL '1 day 4 hour 5 min 6 sec';
?column?
------------
1 day 04:05:06
如果 Vertica 无法确定单位,它会根据间隔限定符将该数量应用于缺失单位。在接下来的两个示例中,Vertica 使用默认间隔限定符 (DAY TO SECOND(6)
) 并将尾数 1
分配给天,因为它已经在输出中处理了小时、分钟和秒:
=> SELECT INTERVAL '4:5:6 1';
?column?
------------
1 day 04:05:06
=> SELECT INTERVAL '1 4:5:6';
?column?
------------
1 day 04:05:06
在接下来的两个示例中,Vertica 将 4:5
识别为 hours:minutes
。将字面量类时间间隔中的剩余值分配给缺失单位: 1
分配给天,而 2
分配给秒。
SELECT INTERVAL '4:5 1 2';
?column?
------------
1 day 04:05:02
=> SELECT INTERVAL '1 4:5 2';
?column?
------------
1 day 04:05:02
指定间隔限定符可以改变 Vertica 解释 4:5
的方式:
=> SELECT INTERVAL '4:5' MINUTE TO SECOND;
?column?
------------
00:04:05