一、需求:
查询某个时间段的所有日期,通过序列和递归测试效率
1、序列
postgresql中的generate_series函数可以按不同的规则产生一系列的填充数据
具体可以参考链接:
https://www.cnblogs.com/mchina/archive/2013/04/03/2997722.html
select date(t) as day
from generate_series('2019-04-27'::date,'2020-05-09', '1 days') as t
2、递归查询
with recursive t(n) as (
select date('2020-04-27')
union all
select n+1 from t where n < date('2020-05-09')
)select n as day from t;
查询结果:
总结:
当数据量小的时候进行测试,序列语句执行了0.004s;递归语句执行了0.007s
当数据量大的时候进行测试,序列语句执行力0.006s;递归语句执行了0.004s
二、举一反三
月份每次加一个月或者加三个月时:
with recursive t(val) as (
select '2019-04-27'::timestamp
union all
select val + interval '3 month' from t where val < CURRENT_DATE
)select to_char(val,'yyyy-mm-dd') as month from t
时间每次增加三个小时:
select generate_series(to_date('20130403','yyyymmdd'), to_date('20130409','yyyymmdd'), '3 hours')