[英]Split single row into multiple rows based on Date and time in SQL Server
[英]Postgresql split single row into multiple rows based on date
在我的例子中,我们有一个表 ABC,其中应该有 1 行。
ID | 姓名 | 开始日期 | 结束日期 |
---|---|---|---|
1 | 拉胡尔 | 2021 年 1 月 1 日 | 2021 年 6 月 1 日 |
但是在检索时,我想获得多行,其中开始日期递增 1,直到它小于或等于结束日期。
ID | 姓名 | 开始日期 | 结束日期 |
---|---|---|---|
1 | 拉胡尔 | 2021 年 1 月 1 日 | 2021 年 6 月 1 日 |
1 | 拉胡尔 | 2021 年 2 月 1 日 | 2021 年 6 月 1 日 |
1 | 拉胡尔 | 2021 年 3 月 1 日 | 2021 年 6 月 1 日 |
1 | 拉胡尔 | 2021 年 4 月 1 日 | 2021 年 6 月 1 日 |
1 | 拉胡尔 | 2021 年 5 月 1 日 | 2021 年 6 月 1 日 |
1 | 拉胡尔 | 2021 年 6 月 1 日 | 2021 年 6 月 1 日 |
请让我知道我们该怎么做。
使用generate_series()
。 假设数据是按天计算的:
select t.id, t.name, gs.date, t.end_date
from t cross join lateral
generate_series(start_date, end_date, interval '1 day') gs(date);
如果您的数据实际上是按月计算的,您只需将'1 day'
更改为'1 month'
。
注意:Postgres 允许在select
中设置返回函数,所以你可以这样写:
select t.id, t.name,
generate_series(start_date, end_date, interval '1 day') as date,
t.end_date
from t;
但是,我认为这不是一个好习惯。 我对select
表达式更改查询返回的行数感到不舒服。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.