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
值。
以下语句返回数据库服务器的当前日期:
获取当前日期的另一种方法是使用
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 文档:
日期/时间类型