专业只做数据库实训和认证的品牌机构

微信公众号新浪微博
免费咨询电话:400-0909-964
当前位置: 网站首页 > postgresql > pg概述 > PostgreSQL教程 -》数据类型 -》日期/时间输入

PostgreSQL教程 -》数据类型 -》日期/时间输入

文章来源: 更新时间:2023/11/7 14:55:20

在线老师点击咨询:

最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!

我要咨询

8.5.1. 日期/时间输入

日期和时间的输入可以接受几乎任何合理的格式,包括 ISO 8601、SQL-兼容的、传统POSTGRES的和其他的形式。 对于一些格式,日期输入里的日、月和年的顺序会让人混淆, 并且支持指定所预期的这些域的顺序。把DateStyle参数设置为MDY,就是选择“月-日-年”的解释,设置为DMY就是 “日-月-年”,而YMD是 “年-月-日”。

PostgreSQL在处理日期/时间输入上比SQL标准要求的更灵活。 参阅附录 B获取关于日期/时间输入的准确的分析规则和可识别文本域,包括月份、星期几和时区。

请记住任何日期或者时间的文字输入需要由单引号包围,就象一个文本字符串一样。参考第 4.1.2.7 节获取更多信息。SQL要求下面的语法

type [ (p) ] 'value'

其中p是一个可选的精度声明,它给出了在秒域中的小数位数目。精度可以被指定给time、timestamp和interval类型,并且可以取从0到6的值。这允许前文所述的值。如果在一个常数声明中没有指定任何精度,它将默认取文字值的精度(但不能超过6位)。

8.5.1.1. 日期

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

表 8.10. 日期输入

例子 描述

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 任何模式下的1月8日

Jan-08-1999 任何模式下的1月8日

08-Jan-1999 任何模式下的1月8日

99-Jan-08 YMD模式中的1月8日,否则错误

08-Jan-99 1月8日,除了在YMD模式中错误

Jan-08-99 1月8日,除了在YMD模式中错误

19990108 ISO 8601; 任何模式中的1999年1月8日

990108 ISO 8601; 任何模式中的1999年1月8日

1999.008 年和一年中的日子

J2451187 儒略日期

January 8, 99 BC 公元前99年

8.5.1.2. 时间

当日时间类型是time [ (p) ] without time zone和time [ (p) ] with time zone。 只写time等效于time without time zone。

这些类型的有效输入由当日时间后面跟着可选的时区组成(参阅表 8.11和表 8.12)。 如果在time without time zone的输入中指定了时区,那么它会被无声地忽略。你也可以指定一个日期但是它会被忽略,除非你使用了一个涉及到夏令时规则的时区,例如America/New_York。在这种情况下,为了判断是应用了标准时间还是夏令时时间,要求指定该日期。适当的时区偏移被记录在time with time zone值中。

表 8.11. 时间输入

例子描述

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:00 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 全名指定的时区

表 8.12. 时区输入

例子描述

PST 缩写(太平洋标准时间)

America/New_York 完整时区名

PST8PDT POSIX风格的时区声明

-8:00 PST的ISO-8601偏移

-800 PST的ISO-8601偏移

-8 PST的ISO-8601偏移

zulu UTC的军方缩写

z zulu的短形式

参考第 8.5.3 节可以了解如何指定时区。

8.5.1.3. 时间戳

时间戳类型的有效输入由一个日期和时间的串接组成,后面跟着一个可选的时区,一个可选的AD或者BC(另外,AD/BC可以出现在时区前面,但这个顺序并非最佳)。 因此:

1999-01-08 04:05:06

和:

1999-01-08 04:05:06 -8:00

都是有效的值,它遵循ISO 8601 标准。另外,使用广泛的格式:

January 8 04:05:06 1999 PST

也被支持。

SQL标准通过“+”或者“-”符号的存在以及时间后面的时区偏移来区分timestamp without time zone和timestamp with time zone文字。因此,根据标准,

TIMESTAMP '2004-10-19 10:23:54'

是一个timestamp without time zone, 而

TIMESTAMP '2004-10-19 10:23:54+02'

是一个timestamp with time zone。PostgreSQL从来不会在确定文字串的类型之前检查其内容,因此会把上面两个都看做是 timestamp without time zone。因此要保证把上面的文字当作timestamp with time zone看待, 就要给它正确的显式类型:

TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'

如果一个文字已被确定是timestamp without time zone,PostgreSQL将不声不响忽略任何其中指出的时区。 即,结果值是从输入值的日期/时间域衍生出来的,并且没有就时区进行调整。

对于timestamp with time zone,内部存储的值总是 UTC (全球统一时间,以前也叫格林威治时间GMT)。如果一个输入值有明确的时区声明, 那么它将用该时区合适的偏移量转换成 UTC。如果在输入串里没有时区声明, 那么它就被假设是在系统的TimeZone参数里的那个时区,然后使用这个 timezone时区的偏移转换成 UTC。

如果一个timestamp with time zone值被输出,那么它总是从 UTC 转换成当前的timezone时区,并且显示为该时区的本地时间。要看其它时区的时间,要么修改timezone,要么使用AT TIME ZONE构造(参阅第 9.9.3 节)。

在timestamp without time zone和timestamp with time zone之间的转换通常假设timestamp without time zone值应该以timezone本地时间的形式接受或者写出。为该转换指定一个不同的可以用AT TIME ZONE。

8.5.1.4. 特殊值

为了方便,PostgreSQL支持一些特殊日期/时间输入值,如表 8.13所示。这些值中infinity和-infinity被在系统内部以特殊方式表示并且将被原封不动地显示。但是其他的仅仅只是概念上的速写,当被读到的时候会被转换为正常的日期/时间值(特殊地,now及相关串在被读到时立刻被转换到一个指定的时间值)。在作为常量在SQL命令中使用时,所有这些值需要被包括在单引号内。

表 8.13. 特殊日期/时间输入

输入串 合法类型 描述

epoch date, timestamp 1970-01-01 00:00:00+00(Unix系统时间0)

infinity date, timestamp 比任何其他时间戳都晚

-infinity date, timestamp 比任何其他时间戳都早

now date, time, timestamp 当前事务的开始时间

today date, timestamp 今日午夜 (00:00)

tomorrow date, timestamp 明日午夜 (00:00)

yesterday date, timestamp 昨日午夜 (00:00)

allballs time 00:00:00.00 UTC

下列SQL-兼容的函数可以被用来为相应的数据类型获得当前时间值: CURRENT_DATE、CURRENT_TIME、 CURRENT_TIMESTAMP、LOCALTIME、 LOCALTIMESTAMP。后四种接受一个可选的亚秒精度声明(参见第 9.9.4 节)。注意这些是SQL函数并且在数据输入串中不被识别。

本文地址:http://www.cuug.com.cn/postgresql/pggaishu/35558973504.html 转载请注明!


在线预约 抢先报名 获取课程排期

Oracle培训机构

金牌讲师<>

冉乃纲-老师CUUG金牌讲师
冉老师 CUUG金牌讲师 Oracle及RedHat高级讲师、Unix/Linux 资深专家...[详细了解老师]

免费咨询上课流程 客服在线中

陈卫星-老师CUUG金牌讲师
陈老师 CUUG金牌讲师 精通Oracle管理、备份恢复、性能优化 11年Ora...[详细了解老师]

免费咨询上课流程 客服在线中

选学校如何选择适合自己的学校

CUUG -CHINA UNIX USER GROUP,是国际UNIX组织UNIFORUM的中国代表,是国内悠久的专业UNIX培训机构,被誉为中国UNIX 的摇篮。多年来,以提高教学质量为本,强调素质教育,积极引进、消化国外的新技术,有效的结合中国....[详情]

一站式服务(从入学到就业一帮到底)

入学

学习

就业

实操

食宿
地址:北京市海淀区北清路164号28-38号院
课程咨询:010-59426307 010-59426319 400-0909-964
企业服务:137 1818 8639(陈经理)
部分信息来源于网络,如有错误请联系指正!
版权所有@北京神脑资讯技术有限公司 (CUUG,中国UNIX用户协会) Copyright 2016 ALL Rights Reserved 京ICP备11008061号-1