PostgreSQL 教程: to_date 函数: 将字符串转换为日期

九月 20, 2023

摘要:本教程向您介绍 PostgreSQL 的TO_DATE()函数,该函数可帮助您将字符串转换为日期。

目录

PostgreSQL TO_DATE 函数简介

TO_DATE()函数将字符串文字转换为日期值。下面说明了TO_DATE() 函数的语法:

TO_DATE(text,format);

TO_DATE() 函数接受两个字符串参数。第一个参数是要转换为日期的字符串。第二个是输入格式。TO_DATE() 函数返回一个日期值。

请参见以下示例:

SELECT TO_DATE('20170103','YYYYMMDD');

输出显示:

  TO_DATE
------------
 2017-01-03

在此示例中,字符串20170103根据输入格式YYYYMMDD转换为日期。

  • YYYY:4 位数格式的年份
  • MM:2 位数字格式的月份
  • DD:2 位数字格式的日期

结果,该函数返回January 3rd 2017

下表说明了用于格式化日期值的模板模式:

模式 描述
Y,YYY 带逗号的年份,4 位数字
YYYY 4 位数字的年份
YYY 年份的最后 3 位数字
YY 年份的最后 2 位数字
Y 年份的最后 1 位数字
IYYY ISO 8601 周编号年份(4 位或更多位)
IYY ISO 8601 周编号年份的最后 3 位数字
IY ISO 8601 周编号年份的最后 2 位数字
I ISO 8601 周编号年份的最后 1 位数字
BC、bc、AD 或 ad 不带句点的纪元指示器
B.C.、b.c.、A.D. 或 a.d. 带句点的纪元指示器
MONTH 全大写的英文月份名称
Month 全首字母大写的英文月份名称
month 全小写的英文月份名称
MON 大写的月份缩写名称,例如 JAN、FEB 等。
Mon 首字母大写的月份缩写名称,例如 Jan、Feb 等。
mon 小写的月份缩写名称,例如 jan、feb 等。
MM 月份号从 01 到 12
DAY 全大写的日名
Day 首字母大写的日名
day 全小写的日名
DY 大写的缩写日名
Dy 首字母大写的缩写日名
dy 全小写的缩写日名
DDD 一年中的日 (001 - 366)
IDDD ISO 8601 方式的一年中的第几天(001 - 371;该年的第 1 天是第一个 ISO 周的星期一)
DD 一个月中的第几天 (01 - 31)
D 一周中的日,星期日 (1) 至星期六 (7)
ID ISO 8601 规范的一周中的日,星期一 (1) 到星期日 (7)
W 一个月中的第几周 (1-5)(第一周从每月的第一天开始)
WW 一年中的第几周 (1-53)(第一周从一年中的第一天开始)
IW ISO 8601 周编号方式的一年中的第几周(01-53;一年中的第一个星期四位于第 1 周)
CC 世纪,例如 21、22 等。
J 儒略日(自 UTC 时间公元前 4714 年 11 月 24 日午夜 起的整数天)
RM 大写的罗马数字月份 (I–XII; I=一月)
rm 小写的罗马数字月份 (i–xii; i=一月)

PostgreSQL TO_DATE 示例

以下语句将字符串 10 Feb 2017 转换为日期值:

SELECT TO_DATE('10 Feb 2017', 'DD Mon YYYY');

输出是:

  TO_DATE
------------
 2017-02-10
(1 row)

假设您要将字符串2017 Feb 10转换为日期值,可以应用模式YYYY Mon DD,如下:

SELECT TO_DATE('2017 Feb 20','YYYY Mon DD');

该函数返回以下输出:

  TO_DATE
------------
 2017-02-20
(1 row)

PostgreSQL TO_DATE 陷阱

如果传递无效的日期字符串,TO_DATE()函数将尝试将其转换为有效的日期,如果不能,则发出错误。例如:

SELECT TO_DATE('2017/02/30', 'YYYY/MM/DD');

PostgreSQL 发出以下错误:

ERROR:  date/time field value out of range: "2017/02/30"
LINE 1: SELECT '2017/02/30'::date;

在本教程中,您学习了如何使用 PostgreSQL 的TO_DATE() 函数,将字符串文字转换为日期值。

了解更多

PostgreSQL 日期函数

PostgreSQL 文档:数据类型格式化函数

to_timestamp(), to_char(), to_number()