Skip to main content

Postgres Timestamp 日期计算

基本时间戳计算

当前时间 +5分钟(minute)

SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP + (5 * INTERVAL '1 minute');

       current_timestamp       |           ?column?            
-------------------------------+-------------------------------
 2022-01-06 06:46:13.137125+00 | 2022-01-06 06:51:13.137125+00

当前时间 -3分钟(minute)

SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP - (3 * INTERVAL '1 minute');

       current_timestamp       |           ?column?            
-------------------------------+-------------------------------
 2022-01-06 06:47:06.786017+00 | 2022-01-06 06:44:06.786017+00

也可以用RFC格式

SELECT '2020-03-20 00:00:00'::TIMESTAMP + INTERVAL '23:59:59';

      ?column?       
---------------------
 2020-03-20 23:59:59
(1 row)

常用时间单位

单位 标识 示例
second 2 * INTERVAL '1 second'
小时 second 2 * INTERVAL '1 hour'
day 2 * INTERVAL '1 day'
礼拜 week 2 * INTERVAL '1 week'
month 2 * INTERVAL '1 month'
year 2 * INTERVAL '1 year'

时间戳比较

比较符号

常用的比较符号都有效。

-- "当前时间 > 当前时间的5分钟后" = FALSE
SELECT CURRENT_TIMESTAMP > CURRENT_TIMESTAMP + (5 * INTERVAL '1 minute');

 ?column? 
----------
 f
(1 row)
-- "当前时间 <> 当前时间的5分钟后" = TRUE
SELECT CURRENT_TIMESTAMP < CURRENT_TIMESTAMP + (5 * INTERVAL '1 minute');

 ?column? 
----------
 t
(1 row)

运算结果比较

-- "当前时间 - 当前时间的5分钟前 > 5分钟" = FALSE
SELECT CURRENT_TIMESTAMP - CURRENT_TIMESTAMP - (5 * INTERVAL '1 minute') > (5 * INTERVAL '1 minute');

 ?column? 
----------
 f
(1 row)

日期开始和结束(trunc)

获取当日开始

SELECT date_trunc('day', '2020-03-20 15:04:05'::TIMESTAMP);
-- 2020-03-20 00:00:00

获取当月开始

SELECT date_trunc('month', '2020-03-20 15:04:05'::TIMESTAMP);
-- 2020-03-01 00:00:00

参考

Add minutes to CURRENT_TIMESTAMP in PostgreSQL

How to get week start and end date string in PostgreSQL?