更新时间:2025-08-04 GMT+08:00
分享

时间/日期操作符

用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。

比如下面示例没有明确数据类型就会出现异常错误。

1
SELECT date '2001-10-01' - '7' AS RESULT;
表1 时间和日期操作符

操作符

用法示例

示例结果

+

date + integer → timestamp

给日期加上天数。

1
SELECT date '2001-09-28' + integer '7' AS RESULT;

date类型参数与integer参数相加,获取时间间隔为7天后的时间:

1
 2001-10-05 00:00:00

+

date + interval → timestamp

为日期添加时间间隔。

1
SELECT date '2001-09-28' + interval '1 hour' AS RESULT;
1
SELECT date '2021-02-28' + interval '1 month' AS RESULT;
1
SELECT date '2021-01-31' + interval '1 month' AS RESULT;

date类型参数与interval参数相加。

获取时间间隔为1小时后的时间:

1
 2001-09-28 01:00:00

获取时间间隔为1个月的时间:

1
 2021-02-28 00:00:00

date函数对于日期相加减超过月份的日期范围,会对齐到对应月份最后一天,不超过则不处理。

1
 2021-03-28 00:00:00

+

date + time → timestamp

在日期中添加一天中的时间。

1
SELECT date '2001-09-28' + time '03:00' AS RESULT;

date类型参数与time类型参数相加,获取具体的日期和时间结果:

1
 2001-09-28 03:00:00

+

interval + interval → interval

添加时间间隔。

1
SELECT interval '1 day' + interval '1 hour' AS RESULT;

interval参数相加,获取两个时间间隔之和:

1
 1 day 01:00:00

+

timestamp + interval → timestamp

在时间戳中添加一个时间间隔。

1
SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT;

timestamp时间类型参数与interval参数相加,获取间隔23小时后的时间:

1
 2001-09-29 00:00:00

+

time + interval → time

为时间添加时间间隔。

1
SELECT time '01:00' + interval '3 hours' AS RESULT;

time类型参数与interval参数相加,获取间隔时间为3小时后的时间:

1
 04:00:00

-

date - date → integer

减去日期,生成日期时间差。

1
SELECT date '2001-10-01' - date '2001-09-28' AS RESULT;

date类型参数相减,获取两个日期的时间差:

1
 3 days

-

date - integer → timestamp

从日期中减去天数。

1
SELECT date '2001-10-01' - integer '7' AS RESULT;

date类型参数与integer参数相减,获取两者的时间差:

1
 2001-09-24 00:00:00

-

date - interval → timestamp

从日期中减去时间间隔。

1
SELECT date '2001-09-28' - interval '1 hour' AS RESULT;

date类型参数与interval参数相减,获取两者的日期、时间差:

1
 2001-09-27 23:00:00

-

time - time → interval

减去时间。

1
SELECT time '05:00' - time '03:00' AS RESULT;

time类型参数相减,获取两参数的时间差:

1
 02:00:00

-

time - interval → time

从时间中减去时间间隔。

1
SELECT time '05:00' - interval '2 hours' AS RESULT;

time类型参数与interval相减,获取两参数的时间差:

1
 03:00:00

-

timestamp - interval → timestamp

从时间戳中减去时间间隔。

1
SELECT timestamp '2001-09-28 23:00' - interval '23 hours' AS RESULT;

timestamp类型参数与interval相减,获取两者的日期时间差:

1
 2001-09-28 00:00:00

-

interval - interval → interval

减去时间间隔。

1
SELECT interval '1 day' - interval '1 hour' AS RESULT;

interval参数相减,获取两者的时间差:

1
 23:00:00

-

timestamp - timestamp → interval

减去时间戳。

1
SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' AS RESULT;

timestamp类型参数相减,获取两者的日期时间差:

1
 1 day 15:00:00

-

select now() - interval → timestamp with time zone

获取当前日期的前一天:

1
select now() - interval '1 day' AS RESULT;

获取当前日期的前一天:

1
 2025-07-29 10:54:29.116501+08

*

interval * double precision → interval

将时间间隔乘以数量:

1
SELECT 900 * interval '1 second' AS RESULT;
1
SELECT 21 * interval '1 day' AS RESULT;
1
SELECT double precision '3.5' * interval '1 hour' AS RESULT;

间隔1秒乘以900。

1
 00:15:00
间隔1天乘以21天。
1
 21 days

间隔1小时乘以3.5。

1
 03:30:00

/

interval / double precision → interval

1
SELECT interval '1 hour' / double precision '1.5' AS RESULT;

用时间间隔除以数量,获取一段时间中的某一段:

1
 00:40:00

相关文档