PostgreSQL DATE 数据类型

本文介绍了在 PostgreSQL 中如何使用 DATE 类型以及一些用于处理 DATE 数据的有用的函数。

PostgreSQL 支持 DATE 数据类型,以存储日期值。

PostgreSQL DATE 数据类型使用 yyyy-mm-dd 格式存储日期值,并且每个日期值占用 4 个字节。

PostgreSQL DATE 语法

要创建一个 DATE 数据类型的列,请使用如下语法:

column_name DATE column_constraint

您可以将 yyyy-mm-dd 格式的文本日期值插入到日期列中。

您可以使用类型转换将一个文本格式的日期值转为日期类型,如下:

'2022-08-30'::DATE

PostgreSQL DATE 实例

使用下面的语句创建一个新表,名称为 test_date:

CREATE TABLE test_date (
  id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  date_value DATE NOT NULL DEFAULT CURRENT_DATE
);

test_date 表由两列组成:

  1. id 列是标识每行的主键列,它是一个标识列
  2. date_value 列是 DATE 数据类型,它不能为 null,并且具有以当前日期为默认值。

插入 DATE 数据

要将数据插入 DATE 列,您必须确保数据采用 yyyy-mm-dd 格式。以下 INSERT 语句向 test_date 表中插入几个新行。

INSERT INTO test_date (date_value)
VALUES
  ('2022-08-29'),
  ('2022-08-30'),
  ('2022-08-31')
RETURNING *;
 id | date_value
----+------------
  1 | 2022-08-29
  2 | 2022-08-30
  3 | 2022-08-31
(3 rows)

更新 DATE 数据

要更新 DATE 数据,使用该 UPDATE 语句并传入一个 yyyy-mm-dd 格式的值:

UPDATE test_date
SET date_value = '2022-09-01'
WHERE id = 3
RETURNING *;
 id | date_value
----+------------
  3 | 2022-09-01
(1 row)

在 WHERE 条件中使用 DATE 数据

您可以在 WHERE 子句中使用 DATE 列过滤数据。

要查找日期为 2022-08-30,请使用以下语句:

SELECT *
FROM test_date
WHERE date_value = '2022-08-30';
 id | date_value
----+------------
  2 | 2022-08-30
(1 row)

您还可以查找日期小于 2022-09-01 的所有的行,如下:

SELECT *
FROM test_date
WHERE date_value < '2022-09-01';
 id | date_value
----+------------
  1 | 2022-08-29
  2 | 2022-08-30
(2 rows)

输出指定格式的日期值

PostgreSQL 提供了 TO_CHAR() 函数以按照指定格式输出日期值。 TO_CHAR() 函数接受两个参数。第一个参数是要格式化的日期值,第二个参数是格式。

要以 yyyy/mm/dd 格式显示日期,请使用以下语句:

SELECT
  id,
  to_char(date_value, 'yyyy/mm/dd')
FROM
  test_date;
 id |  to_char
----+------------
  1 | 2022/08/29
  2 | 2022/08/30
  3 | 2022/09/01
(3 rows)

PostgreSQL 日期函数

PostgreSQL 提供了很多 日期 相关的函数。

要获取当前的日期,请使用 current_date:

SELECT current_date;
 current_date
--------------
 2022-08-31

要计算距离某个日期的年龄,请是 age() 函数:

SELECT age('2001-01-01');
           age
-------------------------
 21 years 7 mons 30 days

要将一个指定格式的日期字符串转为日期值,请使用 to_date() 函数:

SELECT to_date('2022-08-31', 'YYYY-MM-DD');
  to_date
------------
 2022-08-31

要获取日期值中的年、月、日部分,请使用 date_part() 函数:

SELECT
  date_part('year', current_date) "year",
  date_part('month', current_date) "month",
  date_part('day', current_date) "day";
 year | month | day
------+-------+-----
 2022 |     8 |  31

结论

本文讨论了 PostgreSQL DATE 数据类型,以及一些常用的 DATE 操作符和函数。