Postgre SQL 连取一个月日期,一年的每个月一号,月末日期

Postgre SQL 连取一个月日期,一年的每个月一号,月末日期

取一个完整月日期

select generate_series(date_trunc('month',sysdate)::date,--起始日期
date_trunc('month',sysdate)::date +'1 month -1 d'::interval,--结束日期
'1 d'::interval--步调
)::date dayid
查询结果
dayid
2020-09-01
2020-09-02
2020-09-03
2020-09-04
2020-09-05
2020-09-06
2020-09-07
2020-09-08
2020-09-09
2020-09-10
2020-09-11
2020-09-12
2020-09-13
2020-09-14
2020-09-15
2020-09-16
2020-09-17
2020-09-18
2020-09-19
2020-09-20
2020-09-21
2020-09-22
2020-09-23
2020-09-24
2020-09-25
2020-09-26
2020-09-27
2020-09-28
2020-09-29
2020-09-30

取一年的完整月份

当前年份1-12月

取每月第一天日期
--
select mon::date 
from generate_series(date_trunc('year',sysdate)::date,--开始日期  
date_trunc('year', sysdate)::date + '1y -1mon'::interval,--结束日期   
 '1 months'::interval-- step 位移步调  1 months 代表往后推一个月
 ) mon
;

2020-01-01
2020-02-01
2020-03-01
2020-04-01
2020-05-01
2020-06-01
2020-07-01
2020-08-01
2020-09-01
2020-10-01
2020-11-01
2020-12-01
取每月最后一天日期
select last_day(mon)::date 
from generate_series(date_trunc('year',sysdate)::date,--开始日期  
date_trunc('year', sysdate)::date + '1y -1mon'::interval,--结束日期   
 '1 months'::interval-- step 位移步调  1 months 代表往后推一个月
 ) mon
;
2020-01-31
2020-02-29
2020-03-31
2020-04-30
2020-05-31
2020-06-30
2020-07-31
2020-08-31
2020-09-30
2020-10-31
2020-11-30
2020-12-31

从当前月份倒推12个月

取当前月份往前推12个月,每个月第一天
select mon::date 
from generate_series(date_trunc('month',sysdate)::date,--开始日期  date_trunc('month', now())::date 是当前月份第一天
date_trunc('month', sysdate)::date+ '-1y +1mon'::interval,--结束日期   '-1y +1mon' 代表往前推一年,然后再往后加一个月
 '-1 months'::interval-- step 位移步调  -1 months 代表往后倒推一个月
 ) mon
;

2020-09-01
2020-08-01
2020-07-01
2020-06-01
2020-05-01
2020-04-01
2020-03-01
2020-02-01
2020-01-01
2019-12-01
2019-11-01
2019-10-01
取当前月份往前推12个月,每个月最后一天
select last_day(mon)::date 
from generate_series(date_trunc('month',sysdate)::date,--开始日期  date_trunc('month', now())::date 是当前月份第一天
date_trunc('month', sysdate)::date+ '-1y +1mon'::interval,--结束日期   '-1y +1mon' 代表往前推一年,然后再往后加一个月
 '-1 months'::interval-- step 位移步调  -1 months 代表往后倒推一个月
 ) mon
;
2020-09-30
2020-08-31
2020-07-31
2020-06-30
2020-05-31
2020-04-30
2020-03-31
2020-02-29
2020-01-31
2019-12-31
2019-11-30
2019-10-31
主要使用 postgresql序列生成函数,生成连续日期,再进行查询
函数 参数类型 返回类型 描述
generate_series(start,stop) int或bigint setof int或setof bigint(与参数类型相同)) 生成一个数值序列,从start到stop,步长为1 。
generate_series(start,stop,step) int或bigint setof int或setof bigint(与参数类型相同)) 生成一个数值序列,从start到stop,步长为step。
generate_series(start,stop,step) timestamp或timestamp with time zone setof timestamp或setof timestamp with time zone(与参数类型相同) 生成一个数值序列,从start到stop,步长为step。

理解generate_series这个函数,很多小问题将迎刃而解。

你可能感兴趣的:(postgresql,sql)