PostgreSQL 时间/日期函数和操作符详解
                           
天天向上
发布: 2025-03-12 23:52:18

原创
640 人浏览过

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 提供了丰富的日期和时间函数及操作符,可以灵活地处理日期、时间、时间戳等数据类型的计算和转换。你可以使用这些函数来获取当前日期和时间,执行日期计算,格式化日期,比较日期等。理解这些函数和操作符,将帮助你高效地进行日期和时间相关的操作。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *