📚 目录

  1. 概述
  2. 时间/日期函数
  3. 时间/日期操作符
  4. 参考资料

🛠️ 概述

PostgreSQL 提供了一组丰富的时间和日期处理函数以及操作符,用于处理日期和时间值。通过这些函数,用户可以进行各种常见的日期/时间运算,如获取当前时间、日期格式化、时间差计算等。

PostgreSQL 支持多种日期和时间数据类型,如 DATETIMETIMESTAMPINTERVAL 等,下面将介绍一些常用的日期/时间函数和操作符。


📝 时间/日期函数

CURRENT_DATE 和 CURRENT_TIME

CURRENT_DATE 返回当前的日期(不包含时间),格式为 YYYY-MM-DD
CURRENT_TIME 返回当前的时间(不包含日期),格式为 HH:MM:SS

SELECT CURRENT_DATE;  -- 返回当前日期
SELECT CURRENT_TIME;  -- 返回当前时间

NOW() 和 CURRENT_TIMESTAMP

NOW()CURRENT_TIMESTAMP 返回当前的日期和时间(TIMESTAMP 类型),格式为 YYYY-MM-DD HH:MM:SS

SELECT NOW();  -- 返回当前日期和时间
SELECT CURRENT_TIMESTAMP;  -- 同样返回当前日期和时间

这两个函数通常用于记录日志、审计等场景。

AGE() 函数

AGE() 函数用于计算两个时间戳之间的差异,并返回一个 INTERVAL 类型的值。结果包括年、月、天、小时、分钟、秒。

SELECT AGE(TIMESTAMP '2025-04-08', TIMESTAMP '2020-04-08');

此查询将返回从 2020-04-08 到 2025-04-08 之间的时间差。

DATE_TRUNC() 函数

DATE_TRUNC() 函数用于将日期或时间截断为指定的精度。常见的精度有:yearmonthdayhourminutesecond 等。

SELECT DATE_TRUNC('month', NOW());  -- 返回当前日期的月份开始时间
SELECT DATE_TRUNC('year', NOW());   -- 返回当前日期的年份开始时间

DATE_TRUNC() 通常用于按时间粒度对数据进行汇总。

EXTRACT() 函数

EXTRACT() 函数用于从日期或时间值中提取指定的部分(如年份、月份、天数等)。

SELECT EXTRACT(YEAR FROM NOW());   -- 提取当前年份
SELECT EXTRACT(MONTH FROM NOW());  -- 提取当前月份
SELECT EXTRACT(DAY FROM NOW());    -- 提取当前日期

EXTRACT() 函数非常适用于需要按年、月、日等维度进行数据分析的场景。

TO_CHAR() 函数

TO_CHAR() 函数将日期或时间格式化为指定的字符串格式。它允许使用不同的格式模式,如 YYYY(年)、MM(月)、DD(日)、HH24(24小时制小时)等。

SELECT TO_CHAR(NOW(), 'YYYY-MM-DD HH24:MI:SS');  -- 格式化当前时间为 'YYYY-MM-DD HH:MI:SS'
SELECT TO_CHAR(NOW(), 'Day, DD Mon YYYY');       -- 格式化当前时间为 'Day, DD Mon YYYY'

TO_CHAR() 在生成报告和输出特定日期格式时非常有用。


📝 时间/日期操作符

加法操作符

日期/时间加法用于对 DATETIMETIMESTAMP 类型的值进行加法运算。可以使用 + 操作符将时间间隔(INTERVAL)加到日期或时间上。

SELECT NOW() + INTERVAL '1 day';  -- 当前时间加一天
SELECT DATE '2025-04-08' + INTERVAL '2 months';  -- 日期加两个月
SELECT TIME '12:30:00' + INTERVAL '30 minutes';  -- 时间加30分钟

INTERVAL 数据类型允许以多种方式表示时间间隔(如天、小时、分钟、秒等)。

减法操作符

日期/时间减法用于从日期或时间中减去另一个时间值或时间间隔。可以使用 - 操作符进行此类运算。

SELECT NOW() - INTERVAL '1 hour';  -- 当前时间减去一个小时
SELECT DATE '2025-04-08' - INTERVAL '3 days';  -- 日期减去三天
SELECT TIME '12:30:00' - INTERVAL '15 minutes';  -- 时间减去15分钟

在处理时间差时,减法操作符非常实用,特别是在计算持续时间时。


📘 参考资料