我有一个这样的查询,可以很好地生成两个给定日期之间的一系列日期:

select date '2004-03-07' + j - i as AllDate 
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
     generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j

它在2004-03-072004-08-16之间生成162个日期,这就是我想要的.这段代码的问题是,当这两个日期来自不同年份时,例如当我try 2007-02-012008-04-01时,它不会给出正确的答案.

有更好的解决方案吗?

推荐答案

可以在不转换为int/from int的情况下完成(而是转换为time-stamp/from)

SELECT date_trunc('day', dd):: date
FROM generate_series
        ( '2007-02-01'::timestamp 
        , '2008-04-01'::timestamp
        , '1 day'::interval) dd
        ;

Postgresql相关问答推荐

用于JSON数组的带有组合条件的Postgres JSONB Select 查询

使用函数返回值作为另一个函数的参数

SQLX::Query!带有UUID::UUID的宏在Rust中编译失败

即使存在 GIN 索引,整理默认的类似查询也无法执行

在 Postgresql 中实现自定义运算符时出错

求和直到达到一个值 postgresql

具有有限字母表的自定义字符串类型

转到 time.Time to postgresql timestamptz 无法用 time.Now() 保存

如何包装 record_out() 函数?

如何获得区间的绝对值

如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?

sql语句错误:column .. does not exist

plpgsql:使用 2 个 OUT 参数调用函数

我应该同时指定 INDEX 和 UNIQUE INDEX 吗?

Rails ActiveRecord - 如何获取两个日期之间的记录

SQL:多次重复结果行,并对行进行编号

如何从 CSV 为 PostgreSQL 副本生成模式

按任意时间间隔计算行数的最佳方法

将数据推送到 Heroku 时出错:time zone displacement out of range

在 postgresql 中获取上个月的数据