添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

创建一个包含多个字符串的表或视图,例如:

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
    

    这个方法可以方便地将一个字符串按照某种规则进行拆分,并转化为多行数据,方便后续的处理。

  •