PostgreSQL | ||
---|---|---|
上一页 | 第三章. 数据类型 | 下一页 |
表 3-7. Postgres 日期/时间
类型
类型 | 描述 | 存储 | 最早 | 最晚 | 精度 |
---|---|---|---|---|---|
timestamp | 用于包含日期和时间的数据 | 8 bytes | 4713 BC | AD 1465001 | 1 microsec / 14 digits |
interval | 用于时间间隔 | 12 bytes | -178000000 years | 178000000 years | 1 mircosecond |
date | 用于只包含日期的数据 | 4 bytes | 4713 BC | 32767 AD | 1 day |
time | 用于只包含时刻的数据 | 4 bytes | 00:00:00.00 | 23:59:59.99 | 1 microsecond |
注意:为了保证和早期 PostgreSQL 版本的兼容,我们还继续提供 datetime(等效于timestamp)和timespan(等效于interval)。不过对这些类型的支持现在局限于进行一个隐含的转换,转换成timestamp 和 interval。类型abstime和 reltime 是低分辨率类型,它们被用于系统内部。我们不鼓励你在新的应用里面使用这些类型,同时我们支持合适的时候把旧应用中对应的类型转换成目前上面指明的。因为这些旧类型的部分或全部在未来的版本里可能消失。
参阅 日期/时间 支持 获取关于日期/时间输入的准确的分析规则和可识别的时区的信息。
记住任何日期或者时间输入需要被单引号包围,就象一个文本字符串一样。
表 3-8. PostgreSQL 日期输入
例子 | 描述 |
---|---|
January 8, 1999 | 无模糊 |
1999-01-08 | ISO-8601 格式,建议方式 |
1/8/1999 | US;在 European 模式下读做八月一日 |
8/1/1999 | European;在 US 模式下读做八月一日 |
1/18/1999 | US;在任何模式下都读做一月十八日 |
1999.008 | 年和年里的第几天 |
19990108 | ISO-8601 年,月,日 |
990108 | ISO-8601 年,月,日 |
1999.008 | 年和年里的第几天 |
99008 | 年和年里的第几天 |
January 8, 99 BC | 公元前99年 |
表 3-9. PostgreSQL 月份缩写
月份 | 缩写 |
---|---|
April(四月) | Apr |
August(八月) | Aug |
December(十二月) | Dec |
February(二月) | Feb |
January(一月) | Jan |
July(七月) | Jul |
June(六月) | Jun |
March(三月) | Mar |
November(十一月) | Nov |
October(十月) | Oct |
September(九月) | Sep, Sept |
注意: 五月(May)没有缩写,原因是显而易见的。表 3-10. PostgreSQL 星期缩写
星期 | 缩写 |
---|---|
Sunday(星期天) | Sun |
Monday(星期一) | Mon |
Tuesday(星期二) | Tue, Tues |
Wednesday(星期三) | Wed, Weds |
Thursday(星期四) | Thu, Thur, Thurs |
Friday(星期五) | Fri |
Saturday(星期六) | Sat |
表 3-11. PostgreSQL 时间输入
例子 | 描述 |
---|---|
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 |
z | 与 00:00:00 一样 |
zulu | 与 00:00:00 一样 |
allballs | 与 00:00:00 一样 |
带时区时间 接受所有对 time 类型也合法的输入,附加一个合法的时区,如下:
表 3-12. Postgres 带时区时间输入
例子 | 描述 |
---|---|
04:05:06.789-8 | ISO-8601 |
04:05:06-08:00 | ISO-8601 |
04:05-08:00 | ISO-8601 |
040506-08 | ISO-8601 |
参考 Postgres 时区输入 获取时区的更多例子。
1999-01-08 04:05:06 -8:00是一个有效的 timestamp 值,它是 ISO-兼容的。另外,已经广泛使用的格式
January 8 04:05:06 1999 PST也是支持的。
表 3-13. PostgreSQL 时区输入
时区 | 描述 |
---|---|
PST | 太平洋标准时间(Pacific Standard Time) |
-8:00 | ISO-8601 与 PST 的偏移 |
-800 | ISO-8601 与 PST 的偏移 |
-8 | ISO-8601 与 PST 的偏移 |
Quantity Unit [Quantity Unit...] [Direction] @ Quantity Unit [Direction]这里:Quantity 是 ...,-1,0,1,2,...;Unit 是 second,minute,hour,day,week,month,year,decade,century,millenium,或者这些单位的缩写或复数;Direction 可以是 ago 或者为空。
PostgreSQL 为方便期间同样还支持几个特殊常量。
表 3-14. PostgresSQL 日期/时间
特殊常量
常量 | 描述 |
---|---|
current | 当前事务时间, (使用时)deferred |
epoch | 1970-01-01 00:00:00+00 (Unix 系统零时) |
infinity | 比任何有效时间晚 |
-infinity | 比任何有效时间早 |
invalid | 非法输入 |
now | 当前事务时间 |
today | 今日午夜 |
tomorrow | 明日午夜 |
yesterday | 昨日午夜 |
'now' 在该值被插入时解释,'current' 在每次检索该值时被解释。所以你可能会在大多数应用里使用 'now'。(当然你真的想用 CURRENT_TIMESTAMP 的话也行,它等效于 'now'。)
表 3-15. PostgreSQL 日期/时间
输出风格
风格描述 | 描述 | 例子 |
---|---|---|
'ISO' | ISO-8601 标准 | 1997-12-17 07:37:16-08 |
'SQL' | 传统风格 | 12/17/1997 07:37:16.00 PST |
'Postgres' | 原始风格 | Wed Dec 17 07:37:16 1997 PST |
'German' | 地区风格 | 17.12.1997 07:37:16.00 PST |
日期和时间风格的输出当然只是对应上面例子的日期或者时间部分。
SQL 风格有欧洲和非欧洲(US)变种, 决定月份后面是日期还是正相反.(参阅上面日期/时间输入部分,看看这个设置是如何影响对输入值的解释。)
表 3-16. PostgreSQL 日期顺序传统
风格 | 描述 | 例子 |
---|---|---|
European | 日/月/年 | 17/12/1997 15:37:16.00 MET |
US | 月/日/年 | 12/17/1997 07:37:16.00 PST |
interval 的输出看起来象输入格式,只是象 week 或 century 这样的单位被转换成年和日。在 ISO 模式下输出看起来象
[ Quantity Units [ ... ] ] [ Days ] Hours:Minutes [ ago ]有几种方法可以影响日期/时间类型的输出:
为了克服这些困难, Postgres 只将日期和时间类型(同时包含日期和时间)与时区相关联,并且假设任何类型的当地时间只包含日期或时间.另外,时区的支持从操作系统的时区功能中引入,这样就可以处理夏时制或其他可知的因素.
Postgres 从操作系统获得介于1902年和2038年的日期的时区支持(近乎是典型的Unix类系统的日期限制).在这个范围之外的日期都假设为用全球统一时间(Universal Coordinated Time,UTC)声明和使用。
在系统内部,所有日期和时间都是用全球统一时间(UTC)格式存储,也就是通常所说的格林威治时间(GMT).时间在发给客户前端前由数据库服务器转换成本地时间,因而缺省的时区是服务器的时区.
有几种影响时区特性的方法:
注意:如果设置了编译选项 USE_AUSTRALIAN_RULES,那么 EST 代表澳大利亚东部标准时间,( Australia Eastern Std Time)与UTC有 +10:00 小时的偏移量。
19世纪以前的日期传统(历法)对一些趣味读物有意义,但是在我们这里好象没有充分的理由把它们编码入日期/时间控制器里面去。
上一页 | 首页 | 下一页 |
字符类型 | 开头 | 布尔类型 |