添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

PostgreSQL DATE 数据类型简介

要存储日期值,请使用 PostgreSQL DATE 数据类型 。PostgreSQL 使用 4 个字节来存储日期值。 DATE 数据类型的最低和最高值为 4713 BC 和 5874897 AD。

存储日期值时,PostgreSQL 使用 yyyy-mm-dd 格式,例如 2000-12-31。它还使用此格式 插入数据 到日期列。

如果您 创建的表 包含一个 DATE 列,并且希望使用当前日期作为该列的默认值,则可以在 DEFAULT 关键字后面使用 CURRENT_DATE

例如,以下语句创建包含具有 DATE 数据类型的 posting_date 列的 documents 表。该 posting_date 列使用当前日期作为默认值。

DROP TABLE IF EXISTS documents;
CREATE TABLE documents (
	document_id serial PRIMARY KEY,
	header_text VARCHAR (255) NOT NULL,
	posting_date DATE NOT NULL DEFAULT CURRENT_DATE
INSERT INTO documents (header_text)
VALUES('Billing to customer XYZ');
SELECT * FROM documents;

下面显示了上面查询的输出。请注意,您可能会根据数据库服务器的当前日期获得不同的过账日期值。

 document_id |       header_text       | posting_date
-------------+-------------------------+--------------
           1 | Billing to customer XYZ | 2016-06-23
(1 row)

PostgreSQL 日期函数

为了演示,我们将 创建一个新的 employees ,该表由 employee_id first_name last_name birth_date hire_date 列组成,其中 birth_date hire_date 列的数据类型为 DATE

DROP TABLE IF EXISTS employees;
CREATE TABLE employees (
	employee_id serial PRIMARY KEY,
	first_name VARCHAR (255),
	last_name VARCHAR (355),
	birth_date DATE NOT NULL,
	hire_date DATE NOT NULL
INSERT INTO employees (first_name, last_name, birth_date, hire_date)
VALUES ('Shannon','Freeman','1980-01-01','2005-01-01'),
	   ('Sheila','Wells','1978-02-05','2003-01-01'),
	   ('Ethel','Webb','1975-01-01','2001-01-01');

1) 获取当前日期

要获取当前日期和时间,您可以使用内置的 NOW() 函数。但是,要仅获取日期部分(不包含时间部分),请使用双冒号 (::) 将 DATETIME 值转换为 DATE 值。

以下语句返回数据库服务器的当前日期:

SELECT NOW()::date;

获取当前日期的另一种方法是使用 CURRENT_DATE ,如下:

SELECT CURRENT_DATE;

结果的格式为: yyyy-mm-dd 。但是,您可以将日期值输出为各种格式。

2) 以特定格式输出 PostgreSQL 日期值

要以特定格式输出日期值,可以使用 TO_CHAR() 函数。该 TO_CHAR() 函数接受两个参数。第一个参数是要格式化的值,第二个参数是定义输出格式的模板。

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

SELECT TO_CHAR(NOW() :: DATE, 'dd/mm/yyyy');
  to_char
------------
 23/06/2016
(1 row)

或者要以类似 Jun 22, 2016 的格式显示日期,请使用以下语句:

SELECT TO_CHAR(NOW() :: DATE, 'Mon dd, yyyy');
   to_char
--------------
 Jun 23, 2016
(1 row)

3) 获取两个日期之间的间隔

要获取两个日期之间的 间隔 ,请使用减号 ( - ) 运算符。

以下示例通过从今天的日期减去 hire_date 列中的值来获取员工的服务天数:

SELECT
	first_name,
	last_name,
	now() - hire_date as diff
	employees;
 first_name | last_name |           diff
------------+-----------+---------------------------
 Shannon    | Freeman   | 4191 days 08:25:30.634458
 Sheila     | Wells     | 4922 days 08:25:30.634458
 Ethel      | Webb      | 5652 days 08:25:30.634458
(3 rows)

4) 计算年龄(年、月、日)

要计算相对于当前日期的年龄(以年、月和日为单位),请使用 AGE() 函数。

以下语句使用 AGE() 函数计算 employees 表中员工的年龄。

SELECT
	employee_id,
	first_name,
	last_name,
	AGE(birth_date)
	employees;
 employee_id | first_name | last_name |           age
-------------+------------+-----------+-------------------------
           1 | Shannon    | Freeman   | 36 years 5 mons 22 days
           2 | Sheila     | Wells     | 38 years 4 mons 18 days
           3 | Ethel      | Webb      | 41 years 5 mons 22 days
(3 rows)

如果将日期值传递给 AGE() 函数,它将从当前日期中减去该日期值。如果将两个参数传递给 AGE() 函数,它将从第一个参数中减去第二个参数。

例如,要获取日期为 01/01/2015 时员工的年龄,请使用以下语句:

SELECT
	employee_id,
	first_name,
	last_name,
	age('2015-01-01',birth_date)
	employees;
 employee_id | first_name | last_name |           age
-------------+------------+-----------+--------------------------
           1 | Shannon    | Freeman   | 35 years
           2 | Sheila     | Wells     | 36 years 10 mons 24 days
           3 | Ethel      | Webb      | 40 years
(3 rows)

5) 从日期值中提取年、季度、月、周、日

要从日期值获取年、季度、月、周、日,可以使用 EXTRACT() 函数。

以下语句从员工的出生日期中提取年、月、日:

SELECT
	employee_id,
	first_name,
	last_name,
	EXTRACT (YEAR FROM birth_date) AS YEAR,
	EXTRACT (MONTH FROM birth_date) AS MONTH,
	EXTRACT (DAY FROM birth_date) AS DAY
	employees;
 employee_id | first_name | last_name | year | month | day
-------------+------------+-----------+------+-------+-----
           1 | Shannon    | Freeman   | 1980 |     1 |   1
           2 | Sheila     | Wells     | 1978 |     2 |   5
           3 | Ethel      | Webb      | 1975 |     1 |   1
(3 rows)

在本教程中,您了解了 PostgreSQL 的 DATE 数据类型和一些处理日期值的方便函数。

PostgreSQL 教程: 数据类型

PostgreSQL 文档: 日期/时间类型