获取系统时间函数

select now();                --2012-05-12 18:51:59.562+08
select current_timestamp;    --2012-05-12 18:52:12.062+08
select current_date;         --2012-05-12
select current_time;         --18:53:23.234+08
select localtimestamp;       --timestamp without time zone


时间的计算 (使用interval)

select now()+interval '2 day';  --2012-05-14 20:05:32.796+08 2天后
select now()-interval '2 day';  --2012-05-10 20:07:23.265+08 2天前
select now()+interval '2 hour'; --2012-05-12 22:06:38.375+08 2小时后
....

interval可以不写,其值可以是
Abbreviation  Meaning
Y             Years
M             Months (in the date part)
W             Weeks
D             Days
H             Hours
M             Minutes (in the time part)
s   sec
ms  msec
us  usec


时间的截取(使用extract extract(interval,timestamp);)

select extract(year from now());  --2012
select extract(mon from now());     --5 5月份
...

interval值参考上面

时间的转换

select timestamp '2012-05-12 18:54:54';  --2012-05-12 18:54:54
select date '2012-05-12 18:54:54';       --2012-05-12
select time  '2012-05-12 18:54:54';      --18:54:54
select TIMESTAMP WITH TIME ZONE '2012-05-12 18:54:54'   
--2012-05-12 18:54:54+08

--与unix时间戳的转换
SELECT TIMESTAMP 'epoch' + 1341174767 * INTERVAL '1 second'; 
--2012-07-01 20:32:47



注意以下的转换
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2016-09-10 20:38:40.12-08'); --1473568720.12


SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2016-09-10 20:38:40.12-08')::bigint; --1473568720


SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1473568720 * INTERVAL '1 second'; --"2016-09-11 12:38:40+08"


注意:在函数中要计算两个点的时间差,不能使用now()等方法,需要使用:clock_timestamp() , 例如获取当前时间并赋值变量:

select clock_timestamp() INTO process_s_time ;