[英]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.