oracle - 使用分隔值拆分记录
问题描述
我需要将分隔的字符串值分成单独的行我需要的是:
FAILUREID TNO
1 t01
1 t02
1 t03
2 t04
2 t05
但是使用下面的代码我收到了
1 t01
1 t02
1 t03
1 t03
1 t03
1 t02
1 t03
2 t04
2 t05
2 t05
有些行是重复的。以下代码中的错误在哪里,如何修复?(不同的不是解决方案)
with data as
( select 1 as FailureID
,'t01;t02;t03' as Tickets
from dual
union
select 2
,'t04;t05'
from dual
)
select FailureID
,regexp_substr(Tickets, '[^;]+', 1, level) as TNO
from data
connect by regexp_substr(tickets, '[^;]+', 1, level) is not null
order by failureid
解决方案
方法如下(区别从第 13 行开始):
SQL> with data as
2 ( select 1 as FailureID
3 ,'t01;t02;t03' as Tickets
4 from dual
5 union
6 select 2
7 ,'t04;t05'
8 from dual
9 )
10 select FailureID
11 ,regexp_substr(Tickets, '[^;]+', 1, column_value) as TNO
12 from data
13 cross join table(cast(multiset(select level from dual
14 connect by level <= regexp_count(tickets, ';') + 1
15 ) as sys.odcinumberlist))
16 order by failureid;
FAILUREID TNO
---------- -----------
1 t01
1 t02
1 t03
2 t04
2 t05
SQL>
推荐阅读
- php - 使用 PHP?= 在页面之间导航
- ios - iOS App 在 PushViewController 上崩溃,但仅在 TestFlight 中
- javascript - 从父级逐步调用子组件方法
- r - R 的 padr 包声称“日期时间变量不变”,但它确实发生了变化
- reactjs - 我的反应应用程序中的 Google Firebase 身份验证
- java - 如何在HashTable中高效获取Successor?
- python - Pandas 使用许多不同的日期类型格式化日期时间
- css - 多行 TH 的置顶位置
- regex - 正则表达式从公司名称中排除尾随文本
- python - 将公共 IP 列表保存到 python 列表中的简单而高效的方法