PostgreSQL的常用时间函数使用整理如下:
一、获取系统时间函数
1.1 获取当前完整时间
select current_timestamp;
select now();
结果例子:2018-11-02 12:32:38.327824+08
select current_time;
结果例子:12:33:22.922431+08
1.2 获取当前日期
select current_date;
结果例子:2018-11-02
二、时间的计算
2.1 两年后(当前为2018年)
select now() + interval '2 years';
select now() + interval '-2 years';
select now() + interval '2 y';
select now() + interval '2 Y';
select now() + interval '2Y';
结果例子:2020-11-02 12:38:19.450178+08
2.2 一个月后
select now() + interval '1 month';
select now() + interval '-1 month';
2.3 三周前
select now() - interval '3 week'
2.4 一天后
select now() + interval '1 day'
2.5 十分钟后
select now() + '10 min'
说明:
interval 可以不写,其值可以是:
Abbreviation |
Meaning |
Y |
Years |
M |
Months (in the date part) |
W |
Weeks |
D |
Days |
H |
Hours |
M |
Minutes (in the time part) |
S |
Seconds |
三、时间字段的截取
在开发过程中,经常要取日期的年,月,日,小时等值,PostgreSQL 提供一个非常便利的EXTRACT函数。
EXTRACT(field FROM source)
field 表示取的时间对象,source 表示取的日期来源,类型为 timestamp、time 或 interval。
3.1 获取日期的年月日
select extract(month from now());
select extract(YEAR from timestamp '2013-04-13');
SELECT EXTRACT(DAY FROM now());
3.2 查看今天是一年中的第几天:
select extract(doy from now());
四、计算两个时间差
使用 age(timestamp, timestamp)
4.1 select age(now(), timestamp '1990-10-20');
28 years 13 days 12:50:51.48192
4.2 获取两个时间的间隔小时数和天数:
SELECT
EXTRACT (
DAY
FROM
(
max (t1.transfer_begin_time) - min (t1.transfer_begin_time)
)
) * 24 + EXTRACT (
HOUR
FROM
(
max (t1.transfer_begin_time) - min(t1.transfer_begin_time)
)
) as hourcount
FROM
frk.interface_invoke_log t1