我们得到以下格式的数据,我可以使用正则表达式查询对其进行转换。数据是用管道连接的任务的开始和结束数据。
数据:
|2020/04/26|2020/05/02|2020/05/03|2020/05/10
查询:
select REGEXP_SUBSTR (:p, '[^|]+', 1, level) as periods from dual
connect by level <= length (regexp_replace(:p, '[^|]+'))
结果:
2020/04/26
2020/05/02
2020/05/03
2020/05/10
我们需要将它与开始日期和结束日期分开。开始日期和结束日期组合的数量是动态的。但是开始日期会有结束日期,我们不会得到 null。
预期结果
START DATE END DATE
2020/04/26 2020/05/02
2020/05/03 2020/05/10
提前致谢。
最佳答案
你可以做算术和条件聚合:
select
max(case when mod(lvl, 2) = 0 then periods end) start_date,
max(case when mod(lvl, 2) = 1 then periods end) end_date
from (
select
regexp_substr (:p, '[^|]+', 1, level) as periods,
level - 1 as lvl
from dual
connect by level <= length (regexp_replace(:p, '[^|]+'))
) t
group by trunc(lvl / 2)
START_DATE | END_DATE :--------- | :--------- 2020/04/26 | 2020/05/02 2020/05/03 | 2020/05/10
关于sql - 在 Oracle SQL 中将 1 列转换为 2 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61866322/