PostgreSQL7.0手册-用户手册-3. 数据类型
-----------------------------------------------------------------------------
--------------------------------------------------------------------------------
字符类型
SQL92 定义了两种基本的字符类型: char 和 varchar. Postgres 支持这些类型,并且还支持更通用的 text 类型,该类型不象varchar 一样必须要定义一个数据域的上限.
表 3-5. Postgres 字符类型
字符类型 存储空间 评价 描述
char 1 字节 SQL92-兼容 单字符
char(n) (4+n) 字节 SQL92-兼容 定长,不足补空白
text (4+x) 字节 最优 变长
varchar(n) (4+n) 字节 SQL92-兼容 变长,有局限
另外还有一种定长字符类型. name 类型,该类型只有一个用途,就是提供给Postgres 一个特别的类型用于内部名字.该类型通常不是给一般用户使用的.该类型长度当前定为32字符长,但可以使用 NAMEDATALEN 重新定义.这个(变量)是在编译的时候设置的,在以后的版本可能会改变.
表 3-6. Postgres 特殊字符类型
字符类型 存储空间 描述
name 32 字节 32字节内部类型
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
日期/时间类型
PostgreSQL 支持 SQL 中所有的日期和时间类型。
表 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 是低分辨率类型,它们被用于系统内部。我们不鼓励你在新的应用里面使用这些类型,同时我们支持合适的时候把旧应用中对应的类型转换成目前上面指明的。因为这些旧类型的部分或全部在未来的版本里可能消失。
日期/时间输入
日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601,SQL-兼容的,传统 Postgres 的和其他形式的。日期输入里的月份和日子输入可以是模糊的,因此存在一个设置用来表明具体应该如何解释。命令 SET DateStyle TO 'US' 或 SET DateStyle TO 'NonEuropean' 表示设置为“月份在日子前面”,而命令 SET DateStyle TO 'European' 表示设置为“日子在月份前面”。缺省是 ISO 风格,但是缺省值可以在编译或者运行时改变。
参阅 日期/时间支持 获取关于日期/时间输入的准确的分析规则和可识别的时区的信息。
记住任何日期或者时间输入需要被单引号包围,就象一个文本字符串一样。
date(日期)
下表是 date 类型可能的输入方式。
表 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
time(时间)
下面是有效的 time (时间)输入
表 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 一样
带时区时间
这个类型是 SQL92 定义的,但是该定义显示出非常基本的不足,使得这个类型几乎无用。在多数情况下,date,time 和 timestamp 的组合应该能提供任何应用所需要的日期/时间功能的全部范围。
带时区时间 接受所有对 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 时区输入 获取时区的更多例子。
timestamp(时标)
有效的 timestamp 类型的输入包含一个日期和一个时间的连接,后面跟着可选的 AD 或 BC,再后面跟着可选的时区。(参阅下面。)因此
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
--------------------------------------------------------------------------------
字符类型
SQL92 定义了两种基本的字符类型: char 和 varchar. Postgres 支持这些类型,并且还支持更通用的 text 类型,该类型不象varchar 一样必须要定义一个数据域的上限.
表 3-5. Postgres 字符类型
字符类型 存储空间 评价 描述
char 1 字节 SQL92-兼容 单字符
char(n) (4+n) 字节 SQL92-兼容 定长,不足补空白
text (4+x) 字节 最优 变长
varchar(n) (4+n) 字节 SQL92-兼容 变长,有局限
另外还有一种定长字符类型. name 类型,该类型只有一个用途,就是提供给Postgres 一个特别的类型用于内部名字.该类型通常不是给一般用户使用的.该类型长度当前定为32字符长,但可以使用 NAMEDATALEN 重新定义.这个(变量)是在编译的时候设置的,在以后的版本可能会改变.
表 3-6. Postgres 特殊字符类型
字符类型 存储空间 描述
name 32 字节 32字节内部类型
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
日期/时间类型
PostgreSQL 支持 SQL 中所有的日期和时间类型。
表 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 是低分辨率类型,它们被用于系统内部。我们不鼓励你在新的应用里面使用这些类型,同时我们支持合适的时候把旧应用中对应的类型转换成目前上面指明的。因为这些旧类型的部分或全部在未来的版本里可能消失。
日期/时间输入
日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601,SQL-兼容的,传统 Postgres 的和其他形式的。日期输入里的月份和日子输入可以是模糊的,因此存在一个设置用来表明具体应该如何解释。命令 SET DateStyle TO 'US' 或 SET DateStyle TO 'NonEuropean' 表示设置为“月份在日子前面”,而命令 SET DateStyle TO 'European' 表示设置为“日子在月份前面”。缺省是 ISO 风格,但是缺省值可以在编译或者运行时改变。
参阅 日期/时间支持 获取关于日期/时间输入的准确的分析规则和可识别的时区的信息。
记住任何日期或者时间输入需要被单引号包围,就象一个文本字符串一样。
date(日期)
下表是 date 类型可能的输入方式。
表 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
time(时间)
下面是有效的 time (时间)输入
表 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 一样
带时区时间
这个类型是 SQL92 定义的,但是该定义显示出非常基本的不足,使得这个类型几乎无用。在多数情况下,date,time 和 timestamp 的组合应该能提供任何应用所需要的日期/时间功能的全部范围。
带时区时间 接受所有对 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 时区输入 获取时区的更多例子。
timestamp(时标)
有效的 timestamp 类型的输入包含一个日期和一个时间的连接,后面跟着可选的 AD 或 BC,再后面跟着可选的时区。(参阅下面。)因此
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

