C/C++教程

Oracle 字符串转多行(REGEXP_SUBSTR)

本文主要是介绍Oracle 字符串转多行(REGEXP_SUBSTR),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

方案一:

SQL

1.一个数据表(TABLE1_ZK)中存在一个字段(STRS)(存储格式是以【,】隔开的字符串)

2.现需要将其查分为多行数据(每行为其中一个字符串)

3.sql

复制代码
SELECT t.id,
           REGEXP_SUBSTR(t.STRS, '[^,]+', 1, LEVEL) AS mat  
      FROM (
           select bds.id,bds.STRS 
           from  TABLE1_ZK bds 
           where bds.STRS is not null 
       ) t
    CONNECT BY LEVEL <=  regexp_count(t.STRS, ',')+1 
    and t.id = prior t.id  and prior dbms_random.value is not null
复制代码

4.查询结果

 


可能遇见的问题:

SpringBoot   druid 可能会报SQL注入失败:java.sql.SQLException: sql injection violation, deny object : dbms_random

1.原因:

yml中进行了wall(防火墙)配置;wall拦截了dbms_random

2.解决:

去掉其中wall配置即可


方案二:

若业务系统不允许去除wall

更换SQL:

select distinct bds.id, regexp_substr(bds.STRS, '[^,]+', 1, Level,'i') str
from TABLE1_ZK bds 
where bds.STRS is not null 
connect by Level <= LENGTH(bds.STRS) - LENGTH(REGEXP_REPLACE(bds.STRS, ',', '')) + 1

查询结果:


注:大数据量(多行且需字段转行数量较大)可能会出现死循环;

建议程序中循环处理,查询单条并转换;

 

转载:https://www.cnblogs.com/zktww/p/13919398.html

这篇关于Oracle 字符串转多行(REGEXP_SUBSTR)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!