将两个相互依赖的字符串拆分为行
Splitting two interdependent strings into rows
我有两个逗号分隔的字符串,如下所示:
'number1,number2,number3'
'word1, word2, word3'
我想将它们分成几行,保持值的顺序。预期结果是:
COL1 COL2
-------------------------
number1 word1
number2 word2
number3 word3
有一个特殊情况:我们不能使用方括号符号 - [...]。
PS。我找到了如何使用 XMLTable 拆分单个字符串,但我不知道如何将它与保持相同顺序的第二个字符串的值连接起来。
我认为你不需要担心 order 只要行是固定的并且字符串有 substr 值同样的顺序。
更新 OP 想坚持使用 XMLTABLE 解决方案
使用XMLTABLE
SQL> WITH input_data AS
2 (SELECT 'number1,number2,number3' str1, 'word1, word2, word3' str2 FROM dual
3 ) ,
4 temp_data1 AS
5 (SELECT rownum rn,
6 trim(COLUMN_VALUE) str1
7 FROM input_data,
8 xmltable(('"'
9 || REPLACE(str1, ',', '","')
10 || '"'))
11 ) ,
12 temp_data2 AS
13 (SELECT rownum rn,
14 trim(COLUMN_VALUE) str2
15 FROM input_data,
16 xmltable(('"'
17 || REPLACE(str2, ',', '","')
18 || '"'))
19 )
20 SELECT t1.str1,
21 t2.str2
22 FROM temp_data1 t1,
23 temp_data2 t2
24 WHERE t1.rn = t2.rn
25 /
STR1 STR2
------- -------
number1 word1
number2 word2
number3 word3
SQL>
使用REGEXP_SUBSTR
SQL> WITH DATA AS
2 ( SELECT 'number1,number2,number3' str1, 'word1, word2, word3' str2 FROM dual
3 )
4 SELECT trim(regexp_substr(str1, '[^,]+', 1, LEVEL)) str1,
5 trim(regexp_substr(str2, '[^,]+', 1, LEVEL)) str2
6 FROM DATA
7 CONNECT BY LEVEL <= regexp_count(str1, ',')+1
8 /
STR1 STR2
----------------------- -------------------
number1 word1
number2 word2
number3 word3
SQL>
我有两个逗号分隔的字符串,如下所示:
'number1,number2,number3'
'word1, word2, word3'
我想将它们分成几行,保持值的顺序。预期结果是:
COL1 COL2
-------------------------
number1 word1
number2 word2
number3 word3
有一个特殊情况:我们不能使用方括号符号 - [...]。
PS。我找到了如何使用 XMLTable 拆分单个字符串,但我不知道如何将它与保持相同顺序的第二个字符串的值连接起来。
我认为你不需要担心 order 只要行是固定的并且字符串有 substr 值同样的顺序。
更新 OP 想坚持使用 XMLTABLE 解决方案
使用XMLTABLE
SQL> WITH input_data AS
2 (SELECT 'number1,number2,number3' str1, 'word1, word2, word3' str2 FROM dual
3 ) ,
4 temp_data1 AS
5 (SELECT rownum rn,
6 trim(COLUMN_VALUE) str1
7 FROM input_data,
8 xmltable(('"'
9 || REPLACE(str1, ',', '","')
10 || '"'))
11 ) ,
12 temp_data2 AS
13 (SELECT rownum rn,
14 trim(COLUMN_VALUE) str2
15 FROM input_data,
16 xmltable(('"'
17 || REPLACE(str2, ',', '","')
18 || '"'))
19 )
20 SELECT t1.str1,
21 t2.str2
22 FROM temp_data1 t1,
23 temp_data2 t2
24 WHERE t1.rn = t2.rn
25 /
STR1 STR2
------- -------
number1 word1
number2 word2
number3 word3
SQL>
使用REGEXP_SUBSTR
SQL> WITH DATA AS
2 ( SELECT 'number1,number2,number3' str1, 'word1, word2, word3' str2 FROM dual
3 )
4 SELECT trim(regexp_substr(str1, '[^,]+', 1, LEVEL)) str1,
5 trim(regexp_substr(str2, '[^,]+', 1, LEVEL)) str2
6 FROM DATA
7 CONNECT BY LEVEL <= regexp_count(str1, ',')+1
8 /
STR1 STR2
----------------------- -------------------
number1 word1
number2 word2
number3 word3
SQL>