在Oracle SQL中,我尝试在两个日期列之间的一列中打印日期

vwkv1x7d  于 2023-04-20  发布在  Oracle
关注(0)|答案(1)|浏览(160)

下面是一个例子,我有一个类似的数据,我期待两个日期字段之间的concat日期
ABC
| ID|从|到|
| --------------|--------------|--------------|
| 1|2019 - 03 - 12|2019 - 05 - 22|
| 1|2019 - 05 - 21 00:00:00|2022年10月15日|
| 二|2023年1月1日|2023年4月18日|
| 三|2020年3月29日|2019 - 06 - 21 00:00:00|
| 三|2019 - 05 - 21|2019 - 08 - 21 2019 - 08 - 21|
| 三|2022年12月12日|2023年3月20日|
我希望得到从和到列之间的日期和打印结果列与分隔;输出应该类似于下面的内容。
| ID|从|到|结果|
| --------------|--------------|--------------|--------------|
| 1|2019 - 03 - 12|2019 - 05 - 22|2021年4月1日;01/09/2022|
| 1|2019 - 05 - 21 00:00:00|2022年10月15日|2022年7月1日;01/08/2022|
| 二|2023年1月1日|2023年4月18日|2023年2月1日;01/03/2023|
| 三|2020年3月29日|2019 - 06 - 21 00:00:00|2020年4月1日;01/05/2020|
| 三|2019 - 05 - 21|2019 - 08 - 21 2019 - 08 - 21|2023年6月1日;01/07/2023|
| 三|2022年12月12日|2023年3月20日|2022年1月1日;01/02/2023|
感谢您的评分

zzlelutf

zzlelutf1#

使用递归和函数add_months()和listagg():
dbfiddle demo

select id, dt1, dt2, 
       (select listagg(add_months(trunc(dt1, 'month'), level),';') 
               within group (order by level) from dual 
        connect by add_months(trunc(dt1, 'month'), level) < dt2 ) dates
from abc

相关问题