创建一个包含多个字符串的表或视图,例如:
CREATE TABLE string_table (id NUMBER, str VARCHAR2(100));
INSERT INTO string_table VALUES (1, 'apple,banana,orange');
INSERT INTO string_table VALUES (2, 'red,green,blue');
使用正则表达式将字符串拆分为多行,例如:
SELECT id, regexp_substr(str, '[^,]+', 1, LEVEL) AS str_list
FROM string_table
CONNECT BY LEVEL <= LENGTH(REGEXP_REPALCE(str, '[^,]+', '')) + 1
AND PRIOR id = id
AND PRIOR SYS_GUID() IS NOT NULL;
regexp_substr(str, '[^,]+', 1, LEVEL)
:使用正则表达式将字符串按逗号拆分成多个部分,LEVEL表示拆分之后的位置;
CONNECT BY LEVEL <= LENGTH(REGEXP_REPALCE(str, '[^,]+', '')) + 1
:按照正则表达式拆分后的数量进行多层级联,生成多行;
AND PRIOR id = id AND PRIOR SYS_GUID() IS NOT NULL
:避免生成笛卡尔积。
运行结果如下:
ID STR_LIST
1 apple
1 banana
1 orange
2 red
2 green
2 blue
这个方法可以方便地将一个字符串按照某种规则进行拆分,并转化为多行数据,方便后续的处理。