Jen*_*ens 4 sql postgresql date range
这有点类似于PostgreSQL中的获取日期列表,但不完全相同(我认为).
我有一个SQL表,其中每一行都包含一个开始和结束日期.我想形成一个查询,以便对于每一行,对于此范围内的每个日期,我得到一个结果.
例如: id=1, title=MyRange, start=2012-08-05, end=2012-08-08
查询: SELECT * FROM myTyble where id=1 AND ...
结果:
id=1, title=MyRange, date=2012-08-05
id=1, title=MyRange, date=2012-08-06
id=1, title=MyRange, date=2012-08-07
id=1, title=MyRange, date=2012-08-08
Run Code Online (Sandbox Code Playgroud)
我意识到在这个结果集中将复制唯一和主键行,但这对我来说无关紧要.任何想法都会非常受欢迎!
您可以generate_series像从中选择一样轻松加入.像这样的东西应该做的伎俩:
select t.*
from generate_series('2010-01-01'::timestamp, '2013-01-01'::timestamp, '1 day') as s(d)
join your_table t on (s.d between t.start and t.end)
Run Code Online (Sandbox Code Playgroud)
你提供你想要的,而不是真正的日期2010-01-01和2013-01-01课程.
旧版本(例如8.3)没有generate_series适用于时间戳的版本,但您可以通过使用generate_series从初始日期生成日期偏移来伪造它:
select t.*
from generate_series(0, 1096) dt(d)
join your_table t on ('2010-01-01'::date + dt.d between t.start and t.end)
Run Code Online (Sandbox Code Playgroud)
和以前一样,调整0,1096和'2010-01-01'以匹配您的数据.
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |