PostgreSQL7.0手册-用户手册-3. 数据类型
与 PST 的偏移
interval(时间间隔)
interval 可以用下面语法声明:
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 或者为空。
特殊值
下面的SQL-兼容的函数可以用于对应的数据类型的日期或时间输入:CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP。
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'。)
日期/时间输出
使用 SET DateStyle,输出格式可以设成四种风格之一: ISO-8601, SQL (Ingres),传统的 Postgres,和 German 风格。缺省是 ISO 格式。
表 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 ]
有几种方法可以影响日期/时间类型的输出:
直接在postmaster启动时用于后端的环境变量 PGDATESTYLE。
会话开始时用于 libpg 的环境变量 PGDATESTYLE。
SQL 命令 SET DATESTYLE。
时区
Postgres 在典型应用中尽可能与SQL92 的定义相兼容.但 SQL92 标准在日期和时间类型和功能上有一些奇怪的混淆.两个显而易见的问题是:
date(日期)类型与时区没有联系,而 time(时间)类型却有或可以有.
缺省的时区用一个整数常量表示与GMT/UTC的偏移(时差).
然而,现实世界的时区只有在与时间和日期都关联时才有意义,因为时间偏移量(时差)可能因为实行类似夏时制这样的制度而在一年里有所变化.
为了克服这些困难, Postgres 只将日期和时间类型(同时包含日期和时间)与时区相关联,并且假设任何类型的当地时间只包含日期或时间.另外,时区的支持从操作系统的时区功能中引入,这样就可以处理夏时制或其他可知的因素.
Postgres 从操作系统获得介于1902年和2038年的日期的时区支持(近乎是典型的Unix类系统的日期限制).在这个范围之外的日期都假设为用全球统一时间(Universal Coordinated Time,UTC)声明和使用。
在系统内部,所有日期和时间都是用全球统一时间(UTC)格式存储,也就是通常所说的格林威治时间(GMT).时间在发给客户前端前由数据库服务器转换成本地时间,因而缺省的时区是服务器的时区.
有几种影响时区特性的方法:
直接在postmaster启动时后端使用TZ环境变量作为缺省时区.
客户端使用libpq时用 PGTZ 环境变量将时区信息传递给后端.
SQL 命令 SET TIME ZONE 可以给会话设置时区.
如果使用了非法的时区,时区变为GMT(在大多数系统上)。
注意:如果设置了编译选项 USE_AUSTRALIAN_RULES,那么 EST 代表澳大利亚东部标准时间,( Australia Eastern Std Time)与UTC有 +10:00 小时的偏移量。
内部
Postgres 用 Julian 记日法用于所有日期/时间计算。如果假设一年的长度是365.2425天时,这个方法可以很精确地预计/计算从4713BC(公元前4713年)到很久的未来的任意一天的日期。
19世纪以前的日期传统(历法)对一些趣味读物有意义,但是在我们这里好象没有充分的理由把它们编码入日期/时间控制器里面去。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
布尔类型
Postgres 支持用 bool 作为 SQL3 布尔数据类型. bool只能有两个状态之一: '真'('True') 或 '假'('False').第三种状态,'未知'('Unknow'),在 SQL3中没有建议,因而也没有实现;NULL是一个有效的替代品.bool可用于任何布尔表达式,并且布尔表达式的结果也是布尔类型兼容的.
bool 使用1字节存储空间.
表 3-17. Postgres 布尔类型
状态 输出 输入
True 't' TRUE, 't', 'true', 'y', 'yes', '1'
False 'f' FALSE, 'f', 'false', 'n', 'no', '0'
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
几何类型
几何类型表示二维的平面物体.最基本的类型:点,是其他类型的基础.
表 3-18. Postgres 几何类型
几何类型 存储空间 表达 描述
point 16 bytes (x,y) 空间中一点
line 32 bytes ((x1,y1),(x2,y2)) (无穷)直线
lseg 32 bytes ((x1,y1),(x2,y2)) 线段
box 32 bytes ((x1,y1),(x2,y2)) 长方形
path 4+32n bytes ((x1,y1),...) 闭合路径(与多边形类似
interval(时间间隔)
interval 可以用下面语法声明:
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 或者为空。
特殊值
下面的SQL-兼容的函数可以用于对应的数据类型的日期或时间输入:CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP。
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'。)
日期/时间输出
使用 SET DateStyle,输出格式可以设成四种风格之一: ISO-8601, SQL (Ingres),传统的 Postgres,和 German 风格。缺省是 ISO 格式。
表 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 ]
有几种方法可以影响日期/时间类型的输出:
直接在postmaster启动时用于后端的环境变量 PGDATESTYLE。
会话开始时用于 libpg 的环境变量 PGDATESTYLE。
SQL 命令 SET DATESTYLE。
时区
Postgres 在典型应用中尽可能与SQL92 的定义相兼容.但 SQL92 标准在日期和时间类型和功能上有一些奇怪的混淆.两个显而易见的问题是:
date(日期)类型与时区没有联系,而 time(时间)类型却有或可以有.
缺省的时区用一个整数常量表示与GMT/UTC的偏移(时差).
然而,现实世界的时区只有在与时间和日期都关联时才有意义,因为时间偏移量(时差)可能因为实行类似夏时制这样的制度而在一年里有所变化.
为了克服这些困难, Postgres 只将日期和时间类型(同时包含日期和时间)与时区相关联,并且假设任何类型的当地时间只包含日期或时间.另外,时区的支持从操作系统的时区功能中引入,这样就可以处理夏时制或其他可知的因素.
Postgres 从操作系统获得介于1902年和2038年的日期的时区支持(近乎是典型的Unix类系统的日期限制).在这个范围之外的日期都假设为用全球统一时间(Universal Coordinated Time,UTC)声明和使用。
在系统内部,所有日期和时间都是用全球统一时间(UTC)格式存储,也就是通常所说的格林威治时间(GMT).时间在发给客户前端前由数据库服务器转换成本地时间,因而缺省的时区是服务器的时区.
有几种影响时区特性的方法:
直接在postmaster启动时后端使用TZ环境变量作为缺省时区.
客户端使用libpq时用 PGTZ 环境变量将时区信息传递给后端.
SQL 命令 SET TIME ZONE 可以给会话设置时区.
如果使用了非法的时区,时区变为GMT(在大多数系统上)。
注意:如果设置了编译选项 USE_AUSTRALIAN_RULES,那么 EST 代表澳大利亚东部标准时间,( Australia Eastern Std Time)与UTC有 +10:00 小时的偏移量。
内部
Postgres 用 Julian 记日法用于所有日期/时间计算。如果假设一年的长度是365.2425天时,这个方法可以很精确地预计/计算从4713BC(公元前4713年)到很久的未来的任意一天的日期。
19世纪以前的日期传统(历法)对一些趣味读物有意义,但是在我们这里好象没有充分的理由把它们编码入日期/时间控制器里面去。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
布尔类型
Postgres 支持用 bool 作为 SQL3 布尔数据类型. bool只能有两个状态之一: '真'('True') 或 '假'('False').第三种状态,'未知'('Unknow'),在 SQL3中没有建议,因而也没有实现;NULL是一个有效的替代品.bool可用于任何布尔表达式,并且布尔表达式的结果也是布尔类型兼容的.
bool 使用1字节存储空间.
表 3-17. Postgres 布尔类型
状态 输出 输入
True 't' TRUE, 't', 'true', 'y', 'yes', '1'
False 'f' FALSE, 'f', 'false', 'n', 'no', '0'
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
几何类型
几何类型表示二维的平面物体.最基本的类型:点,是其他类型的基础.
表 3-18. Postgres 几何类型
几何类型 存储空间 表达 描述
point 16 bytes (x,y) 空间中一点
line 32 bytes ((x1,y1),(x2,y2)) (无穷)直线
lseg 32 bytes ((x1,y1),(x2,y2)) 线段
box 32 bytes ((x1,y1),(x2,y2)) 长方形
path 4+32n bytes ((x1,y1),...) 闭合路径(与多边形类似

