从 PostgreSQL 中的行生成系列

Posted

技术标签:

【中文标题】从 PostgreSQL 中的行生成系列【英文标题】:Generate Series from Rows in PostgreSQL 【发布时间】:2016-08-25 02:50:04 【问题描述】:

我有一个reservations 表,它有两列(started_atended_at)。我想构建一个查询,将预订行扩展到各自的日子。因此,例如,如果预订持续了 5 天,我希望保留 5 行。大致如下:

电流输出

id | started_at | ended_at
----------------------------
1  | 2016-01-01 | 2016-01-05
2  | 2016-01-06 | 2016-01-10

期望的输出

id | date
---------------
1  | 2016-01-01
1  | 2016-01-02
1  | 2016-01-03
1  | 2016-01-04
1  | 2016-01-05
2  | 2016-01-06
2  | 2016-01-07
2  | 2016-01-08
2  | 2016-01-09
2  | 2016-01-10

我认为generate_series 可能在这里有用,但我不确定语法。非常感谢任何帮助

SQL 小提琴

http://sqlfiddle.com/#!15/f0135/1

【问题讨论】:

试试SELECT id, generate_series(started_at, ended_at, '1 day') FROM reservations; 【参考方案1】:

这在你的小提琴上运行正常

SELECT id, to_char(generate_series(started_at, ended_at, '1 day'),'YYYY-MM-DD') as date
FROM reservations;

【讨论】:

如果希望在所需输出中获得date 类型的日期,可以使用generate_series(started_at, ended_at, '1 day')::date as date。不需要转换成字符串。

以上是关于从 PostgreSQL 中的行生成系列的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 生成日期系列(性能)

MySQL建表语句转PostgreSQL建表语句全纪录

春季启动中的postgresql错误

Postgresql中的large object

POSTGRESQL中的行级锁及ODOO中的应用

我在 ubuntu 12.04 中的 postgresql *.conf 文件在哪里?