时间格式化
获取系统时间函数
- 获取当前完整时间:
select now()
/select current_timestamp
- 获取当前日期:
select current_date
- 获取当前时间:
select current_time
时间的计算
- 两年后:
select now() + interval '2 year'
- 一月后:
select now() + interval '1 month';
- 三周前:
select now() - interval '3 week';
- 分钟后:
select now() + '10 min';
- 上月最后一天:
to_date('2018-03-19','yyyy-mm')-1
- 其中时间可为:
year, month, week, day, hour, minute, second
计算两个时间差
- 语法:
age(timestamp, timestamp)
- 指定时间差:
select age(now(), timestamp '2018-04-01');
- 当前时间差:
select age(timestamp '2018-04-01');
- 天数差:
EXTRACT(day FROM (age(a2.updatetime,a1.createdate)))
时间字段的截取
- 语法:
EXTRACT(field FROM source)
,field
表示取的时间对象,source
表示取的日期来源,类型为timestamp
、time
或interval
。 - 取年份:
select extract(year from now());
- 取天数:
select extract(day from timestamp '2013-04-13');
,SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute');
时间转换函数
- 转字符:
to_char(timestamp/interval, text)
,把时间戳、时间间隔转成字符串 - 转日期:
to_date('05 Dec 2000', 'DD Mon YYYY')
,to_date('2018-03-19', 'yyyy-mm-dd')
- 转时间戳:
to_timestamp('05 Dec 2000', 'DD Mon YYYY')
,to_timestamp('2018-03-19', 'yyyy-mm-dd')
- 时间转字符日期:
to_char(createdate, 'yyyy-mm-dd')
其他函数
- 产生一系列的填充数据
select generate_series(1, 10);
select generate_series(1, 10, 2);
select generate_series(now(), now() + '7 days', '1 day');
select generate_series(to_date('20130403','yyyymmdd'), to_date('20130404','yyyymmdd'), '3 hours');
# 每年每月最后一天
SELECT to_char(to_date('20160201','yyyymmdd')-interval'1 day','yyyy-mm-dd'),'2018-02-28' in (
SELECT to_char(generate_series(to_date('20160201','yyyymmdd'),
to_date(to_char(now(),'yyyy-mm'),'yyyy-mm-dd'), '1 month')-interval'1 day','yyyy-mm-dd'))
- date_trunc
SELECT timestamp '2001-02-16',
date_trunc('month',current_date),
date_trunc('month',now())-interval '1 day',
date_trunc('hour', timestamp '2001-02-16 20:38:40');
文本函数
SELECT split_part('浙江省,杭州市',',',1)
- 升级postgresql9.5.0升级至10.3
- pgsql 插入函数:
psycopg2.cursor().executemany(sql,parm)
,psycopg2.extras.execute_values(psycopg2.cursor(),"Insert into xxx values %s ",parm)