Sql 将逗号分隔的字符串拆分为行
你能解决这个问题吗 写一个查询 输入表t1 我想要这个输出Sql 将逗号分隔的字符串拆分为行,sql,string,oracle,split,Sql,String,Oracle,Split,你能解决这个问题吗 写一个查询 输入表t1 我想要这个输出 sno|sdata 123|abc123 123|abc456 123|bcd789 123|def1011 123|xyz123 请尽可能早地给出解决问题的想法,或多或少 SQL> with test (sno, sdata) as 2 (select 123, 'abc123,abc456,bcd789' from dual union 3 select 123, 'def1011,xyz123' from d
sno|sdata
123|abc123
123|abc456
123|bcd789
123|def1011
123|xyz123
请尽可能早地给出解决问题的想法,或多或少
SQL> with test (sno, sdata) as
2 (select 123, 'abc123,abc456,bcd789' from dual union
3 select 123, 'def1011,xyz123' from dual
4 )
5 select
6 sno,
7 regexp_substr(sdata, '[^,]+', 1, column_value) sdata
8 from test,
9 table(cast(multiset(select level from dual
10 connect by level <= regexp_count(sdata, ',') + 1
11 ) as sys.odcinumberlist));
SNO SDATA
---------- --------------------
123 abc123
123 abc456
123 bcd789
123 def1011
123 xyz123
SQL>
[编辑,以显示如果…,会发生什么情况]
。。。你省略了第9-11行
基本上,列_值引用第9行的级别。如果您重写它,以便查询不使用其中任何一项,您将得到重复项:
SQL> with test (sno, sdata) as
2 (select 123, 'abc123,abc456,bcd789' from dual union
3 select 123, 'def1011,xyz123' from dual
4 )
5 select
6 sno,
7 regexp_substr(sdata, '[^,]+', 1, level) sdata
8 from test
9 connect by level <= regexp_count(sdata, ',') + 1
10 order by 1, 2;
SNO SDATA
---------- --------------------
123 abc123
123 abc456
123 abc456
123 bcd789
123 bcd789
123 bcd789
123 bcd789
123 def1011
123 xyz123
123 xyz123
10 rows selected.
SQL>
避免它们的一种方法是使用DISTINCT,它可以完成任务,但这是错误的,或者使用我在问题的第一个答案中向您展示的语法。请正确设置问题的格式。另外,向我们展示您尝试解决该任务的方法;看一看,新的可口可乐vs经典;18c
SQL> with test (sno, sdata) as
2 (select 123, 'abc123,abc456,bcd789' from dual union
3 select 123, 'def1011,xyz123' from dual
4 )
5 select
6 sno,
7 regexp_substr(sdata, '[^,]+', 1, level) sdata
8 from test
9 connect by level <= regexp_count(sdata, ',') + 1
10 order by 1, 2;
SNO SDATA
---------- --------------------
123 abc123
123 abc456
123 abc456
123 bcd789
123 bcd789
123 bcd789
123 bcd789
123 def1011
123 xyz123
123 xyz123
10 rows selected.
SQL>