sql - 将逗号分隔的列拆分为行 - 对于多行
问题描述
我必须拆分由 ; 分隔的声明字符串 成如下行。如果我声明字符串并拆分它,它会很好地工作。而不是声明,我必须从表中选择这个字符串并重复解析它。每行可以包含不同数量的字符串。
最好的方法是什么?我应该遍历每一行,解析它们还是有更好的方法?
--需要的输出
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;
解决方案
确实没有太大区别-您从表中选择而不是 DUAL,而是使用适当的列myString
:
SELECT TRIM(REGEXP_SUBSTR(A_STRING,'[^;]+',1,LEVEL)) ELEMENT
FROM SOME_TABLE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(A_STRING,'[^;]+')) + 1
我在那里扔了一个TRIM
,因为第二排前面有一个额外的空白。留下或删除我们的选择。
推荐阅读
- css - 防止 nginx 将 css 文件作为文本/纯文本提供
- python - 在 openCV 中优化彩色珠子的图像识别
- excel - 如何在 if 函数中保持相同的单元格引用,直到 if 函数为真/假?
- jquery - 将特定事件从子 iframe 捕获到父 iframe
- php - 函数 setTimezone 更改时区但不更改日期
- python - 在while循环中更新变量的问题
- javascript - 如何实现 JavaScript getUserMedia 存根以发送自定义音频字节
- python - ValueError:信号仅在主线程中有效
- scala - 通过拆分提取字符串和符号
- sql - 是否可以通过将列与另一个存在的临时表匹配来更改列?