2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

B.1. 日期/时间输入解释 #

日期/时间输入字符串使用以下过程进行解码。

  1. 将输入字符串分解为标记,并将每个标记分类为字符串、时间、时区或数字。

    1. 如果数字标记包含冒号 (:),则这是一个时间字符串。包括所有后续的数字和冒号。

    2. 如果数字标记包含连字符 (-)、斜杠 (/) 或两个或多个点 (.),则这是一个日期字符串,其中可能包含文本月份。如果已看到日期标记,则将其解释为时区名称(例如,America/New_York)。

    3. 如果标记仅为数字,则它是单个字段或 ISO 8601 连接日期(例如,1999 年 1 月 13 日的 19990113)或时间(例如,14:15:16 的 141516)。

    4. 如果标记以加号 (+) 或减号 (-) 开头,则它是一个数字时区或一个特殊字段。

  2. 如果标记是字母字符串,则与可能的字符串匹配。

    1. 查看标记是否匹配任何已知时区缩写。这些缩写由 B.4 节中描述的配置设置确定。

    2. 如果未找到,则搜索内部表以将标记匹配为特殊字符串(例如,today)、星期(例如,Thursday)、月份(例如,January)或无关词(例如,aton)。

    3. 如果仍未找到,则抛出错误。

  3. 当标记是数字或数字字段时

    1. 如果有八位或六位数字,并且之前没有读取其他日期字段,则解释为“连接日期”(例如,19990118990118)。解释为 YYYYMMDDYYMMDD

    2. 如果标记是三位数字且年份已读取,则解释为一年中的第几天。

    3. 如果标记是四位或六位数字且年份已读取,则解释为时间(HHMMHHMMSS)。

    4. 如果标记是三位或更多数字且尚未找到任何日期字段,则将其解释为年份(这会强制使用 yy-mm-dd 顺序来处理剩余的日期字段)。

    5. 否则,日期字段顺序假定遵循 DateStyle 设置:mm-dd-yy、dd-mm-yy 或 yy-mm-dd。如果月份或日期字段超出范围,则抛出错误。

  4. 如果指定了 BC,则将年份取反并加一进行内部存储。(格里高利历没有公元零年,所以数字上 1 BC 变为 0 年。)

  5. 如果未指定 BC,并且年份字段是两位数字,则将年份调整为四位数字。如果字段小于 70,则加 2000,否则加 1900。

    提示

    公元 1-99 年可以使用带有前导零的四位数字输入(例如,0099 是公元 99 年)。

提交更正

如果您在文档中发现任何不正确、不符合您对特定功能的实际使用体验或需要进一步澄清的内容,请使用此表单报告文档问题。