PostgreSQL 提供了丰富的时间 / 日期函数和操作符,可用于时间和日期的处理、计算、格式化等操作,下面为你详细介绍:
常用数据类型
在介绍函数和操作符之前,先了解 PostgreSQL 中常用的时间 / 日期数据类型:
DATE
:用于存储日期,格式为YYYY-MM-DD
。TIME
:用于存储一天中的时间,格式为HH:MM:SS
。TIMESTAMP
:用于存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
。TIMESTAMPTZ
:带时区的TIMESTAMP
,会自动处理时区转换。INTERVAL
:用于表示一段时间间隔。
操作符
1. 加法和减法操作符
- 日期和时间与间隔相加 / 减:可以使用
+
和-
操作符将日期或时间与INTERVAL
类型相加或相减,得到新的日期或时间。
-- 计算当前日期往后推 10 天的日期
SELECT CURRENT_DATE + INTERVAL '10 days';-- 计算当前时间往前推 2 小时的时间
SELECT CURRENT_TIME - INTERVAL '2 hours';
- 日期和时间相减:两个日期或时间相减可以得到一个
INTERVAL
类型的结果,表示它们之间的时间间隔。
-- 计算两个日期之间的天数差
SELECT '2025-05-01'::DATE - '2025-04-01'::DATE;
2. 比较操作符
- 可以使用
>
、<
、>=
、<=
、=
、!=
等比较操作符对日期和时间进行比较。
-- 查询 2025 年 1 月 1 日之后的订单
SELECT * FROM orders WHERE order_date > '2025-01-01'::DATE;
函数
1. 获取当前日期和时间
CURRENT_DATE
:返回当前日期。
SELECT CURRENT_DATE;
CURRENT_TIME
:返回当前时间,带时区。
SELECT CURRENT_TIME;
CURRENT_TIMESTAMP
:返回当前日期和时间,带时区。
SELECT CURRENT_TIMESTAMP;
NOW()
:与CURRENT_TIMESTAMP
功能相同,返回当前日期和时间,带时区。
SELECT NOW();
2. 日期和时间提取函数
EXTRACT
:用于从日期或时间中提取特定的部分,如年、月、日、小时等。
-- 提取当前日期的年份
SELECT EXTRACT(YEAR FROM CURRENT_DATE);-- 提取当前时间的小时数
SELECT EXTRACT(HOUR FROM CURRENT_TIME);
DATE_PART
:功能与EXTRACT
类似,也是从日期或时间中提取特定部分。
-- 提取日期的月份
SELECT DATE_PART('month', '2025-05-10'::DATE);
3. 日期和时间格式化函数
TO_CHAR
:用于将日期或时间格式化为指定的字符串。
-- 将当前日期格式化为 'YYYY年MM月DD日' 的形式
SELECT TO_CHAR(CURRENT_DATE, 'YYYY年MM月DD日');-- 将当前时间格式化为 'HH24:MI:SS' 的形式
SELECT TO_CHAR(CURRENT_TIME, 'HH24:MI:SS');
4. 日期和时间计算函数
AGE
:计算两个日期或时间之间的时间间隔。
-- 计算从出生到现在的年龄
SELECT AGE(CURRENT_DATE, '1990-01-01'::DATE);
MAKE_DATE
、MAKE_TIME
、MAKE_TIMESTAMP
:用于根据指定的部分创建日期、时间或日期时间。
-- 创建一个日期
SELECT MAKE_DATE(2025, 5, 10);-- 创建一个时间
SELECT MAKE_TIME(12, 30, 0);-- 创建一个日期时间
SELECT MAKE_TIMESTAMP(2025, 5, 10, 12, 30, 0);
5. 时区转换函数
AT TIME ZONE
:用于进行时区转换。
-- 将当前时间转换为纽约时区的时间
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'America/New_York';