日期/时间表达式
Vertica 将内部启发式解析器用于全部日期/时间输入支持。日期和时间以字符串输入,通过初步确定字段中可能存在的信息种类,拆分为不同字段。每个字段均被解释并分配数值,或者被忽略或拒绝。解析器包含所有文本字段的内部查询表,包括月份、星期和时区。
Vertica 解析日期/时间类型输入内容如下:
-
将输入字符串拆分为标记,并将每个标记分类为字符串、时间、时区或数字。
-
数字标记包含:
-
冒号 (:)- 解析为时间字符串,包括所有后续数字和冒号。
-
破折号 (-)、斜杠 (/) 或者两个或更多的点 (.)- 解析为日期字符串,可能包含文本月份。
-
仅数字 - 解析为单一字段或 ISO 8601 串联日期(19990113 表示 1999 年 1 月 13 日)或时间(141516 表示 14:15:16)。
-
-
以加号 (+) 或减号 (–) 作为开头的标记:解析为时区或特殊字段。
-
标记是文本字符串:与可能的字符串相匹配。
-
使用二分搜索表查找标记,特殊字符串(例如今日)、星期(例如星期四)、月份(例如一月)或干扰词(例如 at、on)。
-
设置字段的字段值和位掩码。例如,设置今日对应的年、月、日,还有当前的小时、分钟、秒钟。
-
如果未找到,进行类似的二分搜索表查询,将标记与时区进行匹配。
-
如果仍未找到,则会收到错误消息。
-
-
标记可以是一个数字或数字字段:
-
如果是 8 位或 6 位数,且之前没有读取其他日期字段,则解释为“串联日期”(19990118 或 990118)。此解释为
YYYYMMDD
或YYMMDD
。 -
如果标记是三位数,并且已经读取了年份,则解释为一年中的第几日。
-
如果标记是四位或六位数,并且已经读取了年份,则解释为时间(
HHMM
或HHMMSS
)。 -
如果是三位或更多位数,且未找到日期字段,则解释为年份(这样会强制剩余的日期字段按“年-月-日”的格式排序)。
-
否则,假定日期字段排序遵循
DateStyle
设置:月-日-年、日-月-年或年-月-日。如果发现月份或日期字段超出范围,则会收到错误消息。
-
-
如果已指定 BC:忽略年份并添加一个用于内部存储。(在 Vertica 实施中,1 BC = 元年。)
-
如果未指定 BC,且年份字段是两位长度:将年份调整为四位数。如果字段小于 70,则添加 2000,否则添加 1900。
提示
公历年 AD 1–99 可按 4 位数输入,开头加零,例如,0099 = AD 99。年月日排序
对于某些格式,年、月、日的日期输入排序不明确,可支持指定这些字段的预期排序。
特殊日期/时间值
为了方便起见,Vertica 支持数个特殊日期/时间值,如下所示。当用作 SQL 语句中的常数时,所有这些值在书写时都需要加单引号。
值 INFINITY
和 -INFINITY
在系统中以特殊形式表示,并以相同方式显示。其他值为读取时转换为普通日期/时间值的简写符号。(尤其是,NOW
和相关字符串在读取后立即转换为特定时值。)
以下兼容 SQL 的函数也可用于获取相应数据类型的当前时间值。
后四个接受可选的精度要求。(请参阅日期/时间函数。)然而,这些函数是 SQL 函数,不能识别为数据输入字符串。