前几天干活儿的时候,项目中有这么个需求,需要用pgsql查询两个日期间的所有日期,包括年月日,下面贴代码:
select date(t) as day
from
generate_series('2020-10-27'::date,'2020-11-03', '1 days') as t;
下面是执行效果,跨年跨月的情况也是没问题的:
下面咱们说下PostgreSql中generate_series函数的用法:
用处:他可以按照不同的规则来生成填充数据
语法:
函数 | 参数类型 | 返回类型 | 描述 |
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 |
也可以用递归来做,其中recursive函数配合with查询来实现遍历,效率会更高一些:
with recursive t(n) as (
select date('2020-10-27')
union all
select n+1 from t where n < date('2020-11-03')
)select n as day from t;
执行效果: