sql - PostgreSQL 增量日期?

标签 sql postgresql generate-series

我有一个包含以下数据的数据库表:

ID | Date       | Bla
1  | 2013-05-01 | 1
2  | 2013-05-02 | 2
3  | 2013-05-03 | 3
4  | 2013-05-05 | 4

请注意缺少日期:2014-05-04。我应该如何更改以下查询:

SELECT * 
FROM table 
where DATE >= '2013-05-01' AND DATE <= '2013-05-05'

所以我最终会得到以下输出:

ID   | Date       | Bla
1    | 2013-05-01 | 1
2    | 2013-05-02 | 2
3    | 2013-05-03 | 3
null | 2013-05-04 | null
4    | 2013-05-05 | 4

这可能吗?

最佳答案

您可以加入 generate_series 输出:

select
    '2013-05-01'::date + g.o AS "date with offset"
from
    generate_series(0, 30) AS g(o)

输出:

"2013-05-01"
"2013-05-02"
"2013-05-03"
...
"2013-05-29"
"2013-05-30"
"2013-05-31"

或者...在定义新的存储过程之后更简单的方法:)

CREATE OR REPLACE FUNCTION generate_series(date, date) RETURNS
SETOF date AS $$
SELECT $1 + g.s
FROM generate_series(0, ($2 - $1)) AS g(s);
$$ LANGUAGE SQL IMMUTABLE;

就这样调用它:

SELECT * FROM generate_series(start_date, end_date);

关于sql - PostgreSQL 增量日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471385/

相关文章:

postgresql - 插入值 (generate_series) - 如何重用/循环数字,例如 1,2,3,1,2,3

mysql - 使用 INNER JOIN 在表之间插入 INSERT INTO

mysql - 我如何连接 2 个查询?

ruby-on-rails - rails 3.1 : postgres: why does db:create ignore my database. yml 文件?

sql - 重构一个 PL/pgSQL 函数以返回各种 SELECT 查询的输出

sql - 在 PostgreSQL 查询中使用 generate_series

mysql - SQL查询-如果存在则更新,否则插入

mysql - SQL行锁和事务

java - 如何在 Hibernate 中使用 setParameter

postgresql - Postgres Generate_Series 返回错误数量的结果