首页 > 解决方案 > 将逗号分隔的列拆分为行 - 对于多行

问题描述

我必须拆分由 ; 分隔的声明字符串 成如下行。如果我声明字符串并拆分它,它会很好地工作。而不是声明,我必须从表中选择这个字符串并重复解析它。每行可以包含不同数量的字符串。

最好的方法是什么?我应该遍历每一行,解析它们还是有更好的方法?

--需要的输出

status := off
status:= on

- 询问

declare
myString varchar2(2000):='status := off; status:= on;';
begin
     for r in
      ( select regexp_substr(myString,'[^;]+',1,level) element
          from dual
       connect by level <= length(regexp_replace(myString,'[^;]+')) + 1
      )
      loop
       dbms_output.put_line(r.element);
     end loop;
   end;

标签: sqloracleplsqlregexp-substr

解决方案


确实没有太大区别-您从表中选择而不是 DUAL,而是使用适当的列myString

SELECT TRIM(REGEXP_SUBSTR(A_STRING,'[^;]+',1,LEVEL)) ELEMENT
  FROM SOME_TABLE
  CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(A_STRING,'[^;]+')) + 1

我在那里扔了一个TRIM,因为第二排前面有一个额外的空白。留下或删除我们的选择。

db<>在这里摆弄


推荐阅读