日期/时间类型

HGDB 支持 SQL 中所有的日期和时间类型,日期根据公历来计算,对于该历法被引入之前的年份也一样。

下表是 HGDB 中的日期/时间类型。

名字 存储尺寸 描述 最小值 最大值 解析度
timestamp [ (p) ] [ without time zone ] 8字节 包括日期和时间(无时区) 4713BC 294276AD 1微秒
timestamp [ (p) ] with time zone 8字节 包括日期和时间,有时区 4713BC 294276AD 1微秒
date 4字节 日期(没有一天中的时间) 4713BC 5874897AD 1日
time [ (p) ] [ without time zone ] 8字节 一天中的时间(无日期) 00:00:00 24:00:00 1微秒
time [ (p) ] with time zone 12字节 仅仅是一天中的时间(没有日期),带有时区 00:00:00+1459 24:00:00-1459 1微秒
interval [ fields ] [ (p) ] 16字节 时间间隔 -178000000年 178000000年 1微秒

HGDB 中,timestamp 等效于 timestamp without time zone,timestamptz 被接受为 timestamp with time zone 的一种简写。

time、timestamp 和 interval 接受一个可选的精度值 p,这个精度值声明在秒域中小数点之后保留的位数,p 允许的范围是从0到6,缺省情况下,在精度上没有明确的边界。

interval 类型有一个附加选项,可以通过写下面之一的短语来限制存储的 fields 的集合:

YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、

YEAR TO MONTH、DAY TO HOUR、DAY TO MINUTE、DAY TO SECOND、

HOUR TO MINUTE、HOUR TO SECOND、MINUTE TO SECOND

注意如果 fields 和 p 被指定,fields 必须包括 SECOND,因为精度只应用于秒。

日期/时间输入

所有日期或者时间在输入时都需要由单引号包围,就像一个文本字符串一样。

日期和时间的输入可以接受几乎任何合理的格式,包括 ISO 8601、SQL-兼容的、传统的和其他的形式。DateStyle 参数可以指定日期输入的格式,MDY 是“月-日-年”,DMY 是“日-月-年”,YMD 是“年-月-日”。

下表显示了 date 类型可能的输入方式。

例子 描述
1999-01-08 ISO 8601;任何模式下的1月8日(推荐格式)
January 8,1999 在任何 DateStyle 输入模式下都无歧义
1/8/1999 MDY 模式中的1月8日;DMY 模式中的8月1日
1/18/1999 MDY 模式中的1月18日;在其他模式中被拒绝
01/02/03 MDY 模式中的2003年1月2日;
DMY 模式中的2003年2月1日;
YMD 模式中的2001年2月3日
1999-Jan-08;
Jan-08-1999;
08-Jan-1999
任何模式下的1月8日
99-Jan-08 YMD 模式中的1月8日,否则错误
08-Jan-99
Jan-08-99
1月8日,除了在 YMD 模式中错误
19990108
990108
ISO 8601;任何模式中的1999年1月8日
1999.008 年和一年中的日子
J2451187 儒略日期
January 8, 99 BC 公元前99年

时间:当日时间类型是 time [ (p) ] without time zone 和 time [ (p) ] with time zone,只写 time 等效于 time without time zone。这些类型的有效输入由当日时间后面跟着可选的时区组成,时间类型中指定的日期会被忽略,除非使用了一个涉及到夏令时规则的时区,例如 America/New_York。time without time zone 中指定的时区也会被无声地忽略。

例子 描述
04:05:06.789 ISO 8601
04:05:06 ISO 8601
04:05 ISO 8601
040506 ISO 8601
04:05 AM 和 04:05 一样,AM 并不影响值
04:05 PM 和 16:05 一样,输入的小时必须 <= 12
04:05:06.789-8 ISO 8601
04:05:06-08:99 ISO 8601
04:05-08:00 ISO 8601
040506-08 ISO 8601
04:05:06 PST 缩写指定的时区
2003-04-12 04:05:06 America/New_York 全名指定的时区