
PostgreSQL 提供了丰富的日期和时间函数及操作符,用于处理和操作日期、时间、时间戳等数据类型。你可以使用这些函数和操作符执行各种常见的日期和时间计算任务。
1. PostgreSQL 日期/时间数据类型
首先,我们需要了解 PostgreSQL 支持的主要日期和时间数据类型:
DATE
:表示日期,格式为YYYY-MM-DD
。TIME
:表示时间,格式为HH:MI:SS
。TIMESTAMP
:表示日期和时间,格式为YYYY-MM-DD HH:MI:SS
。TIMESTAMPTZ
:表示带时区的时间戳,格式为YYYY-MM-DD HH:MI:SS+TZ
。INTERVAL
:表示时间间隔,如1 day
,2 hours
。
2. 常见日期/时间函数
2.1 获取当前日期和时间
CURRENT_DATE
:返回当前的日期。CURRENT_TIME
:返回当前的时间。CURRENT_TIMESTAMP
:返回当前的时间戳(包括日期和时间)。NOW()
:与CURRENT_TIMESTAMP
等效,返回当前的时间戳。
示例:获取当前日期和时间
SELECT CURRENT_DATE; -- 返回当前日期
SELECT CURRENT_TIME; -- 返回当前时间
SELECT CURRENT_TIMESTAMP; -- 返回当前时间戳
SELECT NOW(); -- 返回当前时间戳
2.2 提取日期/时间部分
PostgreSQL 提供了 EXTRACT
函数,可以从时间戳中提取特定的部分(如年、月、日、小时等)。
EXTRACT(field FROM source)
:提取时间戳中的某个字段。
示例:提取年、月、日
SELECT EXTRACT(YEAR FROM CURRENT_DATE); -- 提取当前年份
SELECT EXTRACT(MONTH FROM CURRENT_DATE); -- 提取当前月份
SELECT EXTRACT(DAY FROM CURRENT_DATE); -- 提取当前日期
示例:提取时间部分
SELECT EXTRACT(HOUR FROM CURRENT_TIME); -- 提取小时
SELECT EXTRACT(MINUTE FROM CURRENT_TIME); -- 提取分钟
SELECT EXTRACT(SECOND FROM CURRENT_TIME); -- 提取秒
2.3 获取当前日期/时间的格式化输出
使用 TO_CHAR()
函数将日期/时间转换为特定格式的字符串。
示例:格式化输出
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS'); -- 格式化时间戳
SELECT TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD'); -- 格式化日期
SELECT TO_CHAR(CURRENT_TIME, 'HH24:MI:SS'); -- 格式化时间
2.4 计算日期/时间差(INTERVAL)
使用 -
运算符可以计算两个日期/时间之间的差异,结果是 INTERVAL
类型。
示例:日期/时间差计算
SELECT CURRENT_TIMESTAMP - '2025-03-01 10:00:00'::timestamp; -- 计算时间戳差异
SELECT '2025-03-01'::date - '2025-02-01'::date; -- 计算日期差异
2.5 日期加减
你可以使用 +
或 -
操作符,或者使用 INTERVAL
类型进行日期和时间的加减操作。
示例:日期加减
SELECT CURRENT_DATE + INTERVAL '1 day'; -- 当前日期加一天
SELECT CURRENT_DATE - INTERVAL '1 month'; -- 当前日期减去一个月
SELECT CURRENT_TIMESTAMP + INTERVAL '5 hours'; -- 当前时间戳加五小时
3. 日期/时间操作符
3.1 日期/时间比较操作符
PostgreSQL 支持多种用于日期/时间比较的操作符:
=
:等于!=
或<>
:不等于>
:大于<
:小于>=
:大于或等于<=
:小于或等于
示例:日期比较
SELECT '2025-03-12'::date = CURRENT_DATE; -- 判断日期是否相等
SELECT '2025-03-12'::date > CURRENT_DATE; -- 判断日期是否大于当前日期
SELECT '2025-03-12'::date <= '2025-03-15'::date; -- 判断日期是否小于等于某个日期
3.2 日期/时间间隔操作符
PostgreSQL 提供了多种操作符来进行日期/时间的加减。主要是 +
和 -
运算符。
+
:将时间间隔添加到日期或时间-
:将时间间隔从日期或时间中减去
示例:日期和时间的加减
SELECT '2025-03-12'::date + INTERVAL '10 days'; -- 将 10 天加到日期
SELECT '2025-03-12'::date - INTERVAL '10 days'; -- 从日期减去 10 天
SELECT CURRENT_TIMESTAMP + INTERVAL '1 hour'; -- 当前时间加 1 小时
3.3 计算两个时间点的差值
使用 -
运算符可以计算两个时间点的差值,返回一个 INTERVAL
。
示例:计算时间差
SELECT CURRENT_TIMESTAMP - '2025-03-01 10:00:00'::timestamp; -- 计算时间戳差异
SELECT '2025-03-12'::date - '2025-02-12'::date; -- 计算日期差异
4. 时间戳和时区处理
4.1 使用时区
PostgreSQL 允许使用时区进行日期和时间的处理。
TIMESTAMPTZ
:带时区的时间戳。SET TIMEZONE
:设置当前会话的时区。
示例:使用时区
SET TIMEZONE = 'UTC'; -- 设置时区为 UTC
SELECT CURRENT_TIMESTAMP; -- 返回 UTC 时间戳
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'US/Eastern'; -- 转换为美国东部时区
4.2 转换时区
PostgreSQL 允许在不同的时区之间进行转换:
示例:时区转换
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC'; -- 转换为 UTC 时间
SELECT '2025-03-12 12:00:00'::timestamp AT TIME ZONE 'America/New_York'; -- 转换为纽约时区
5. 常见的日期/时间函数
5.1 DATE_TRUNC
函数
DATE_TRUNC
用于截断时间戳到指定的粒度(如小时、天、月等)。
示例:截断时间戳
SELECT DATE_TRUNC('hour', CURRENT_TIMESTAMP); -- 截断到小时
SELECT DATE_TRUNC('day', CURRENT_TIMESTAMP); -- 截断到天
SELECT DATE_TRUNC('month', CURRENT_TIMESTAMP); -- 截断到月
5.2 AGE
函数
AGE
函数用于计算两个日期/时间之间的差异,并返回一个 INTERVAL
。
示例:计算年龄
SELECT AGE('2025-03-12'::date, '1990-01-01'::date); -- 计算两个日期的年龄差
总结
PostgreSQL 提供了丰富的日期和时间函数及操作符,可以灵活地处理日期、时间、时间戳等数据类型的计算和转换。你可以使用这些函数来获取当前日期和时间,执行日期计算,格式化日期,比较日期等。理解这些函数和操作符,将帮助你高效地进行日期和时间相关的操作。
更多详细内容请关注其他相关文章!