最近使用有个业务需要展示20190101和20190106所有的时间段,例如
20190101
20190102
20190103
20190104
20190105
20190106
但是数据库中存的只有以下
20190101
20190102
20190104
20190106
那我们需要把20190103、20190105填充进去。
方式一:
新建个存储日期的temp表(把要展示的时间点插入进去),然后进行left join,这样就能展示所有的时间点了。
select * from temp left join timeTable on
方式二:
使用generate_series函数定义:generate_series(start, stop, step interval)
select to_char(generate_series('20190101'::date,'20190106',
'1 day'),'yyyymmdd');
--查询结果:
20190101
20190102
20190103
20190104
20190105
20190106
扩展:
–按天 查询2019-01-01到现在的所有时间点
select to_char(generate_series('2019-01-01'::date,current_date,
'1 day'),'yyyy-mm-dd');
–按小时 查询2019-11-06 00:00到8点钟的所有时间点
select to_char(generate_series('2019-11-06 00:00'::date,'2019-11-06 08:00',
'1 HOUR'),'yyyy-mm-dd HH24:MI');
官网generate_series详解