Oracle根据逗号拆分字段内容转成多行的函数说明(oracle用逗号拆分多列)万万没想到

随心笔谈1年前 (2023)发布 admin
108 0



目录使用场景1.业务表A2.实现拆分SQL3.REGEXP_SUBSTR函数1)参数说明2)案例4.REGEXP_REPLACE函数1)参数说明5.CONNECT BY函数1)基本语法2)案例6.LENGTH函数1)参数说明2)案例总结

业务表A中一个字段存放用逗号分割的多个业务单元,现在需要将数据转成一个业务单元对应一个数据。

SELECT * FROM app_template_dept t WHERE t.evaluate_index_code=’3330326′;

SELECT DISTINCT A.*, REGEXP_SUBSTR(A.DEPT_CODE, ‘[^,]+’, 1, Level, ‘i’)
FROM (SELECT *
FROM APP_TEMPLATE_DEPT T
WHERE T.EVALUATE_INDEX_CODE=’3330326′) A
CONNECT BY Level<=LENGTH(A.DEPT_CODE) –
LENGTH(REGEXP_REPLACE(A.DEPT_CODE, ‘,’, ”)) + 1;

对字符串进行正则分割,取特定字符的函数。

REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

String: 需要进行正则处理的字符串pattern:进行匹配的正则表达式position:起始位置,从第几个字符开始正则表达式匹配(默认为1)

:字符串最初的位置是1而不是0occurrence:标识第几个匹配组,默认为1

:分割后最初的字符串会按分割的顺序排列成组modifier:模式(’i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)

:针对的是正则表达式里字符大小写的匹配

SELECT REGEXP_SUBSTR(‘1a2A33a’,'[^A]+’,1,2,’c’) AS STR FROM DUAL; –结果:33a

SELECT REGEXP_SUBSTR(‘1a2A33a’,'[^A]+’,1,2,’i’) AS STR FROM DUAL; –结果:2

SELECT REGEXP_SUBSTR(‘1a2A33a’,'[^A]+’,1,Level,’i’) AS STR FROM DUAL CONNECT BY LEVEL<=5; –结果:1、2、33、null、null

通过正则表达式来进行匹配替换。

REGEXP_REPLACE(VARCHAR str, VARCHAR pattern, VARCHAR replacement)

str:指定的字符串pattern:被替换的字符串replacement:用于替换的字符串 2)案例

SELECT REGEXP_REPLACE(‘1a2A33a’,’A’,”) AS STR FROM DUAL; –结果:1a233a

一般用来查找存在父子关系的数据,也就是树形结构的数据。

select … from
where … –过滤条件,用于对返回的所有记录进行过滤。
[start with …] –查询结果重起始根结点的限定条件。
connect by [prior] id=parentid–连接条件
;

start with:用来限制第一层的数据,或者叫根节点数据,以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推。connect by [prior] id=parentid :这部分是用来指明oracle在查找数据时以怎样的一种关系去查找,比如说查找第二层的数据时用第一层数据的id去跟表里面记录的parentid字段进行匹配,如果这个条件成立那么查找出来的数据就是第二层数据,同理查找第三层第四层…等等都是按这样去匹配。

也可以写成,这种用法就表示从下往上查找数据,可以理解为从叶子节点往上查找父级几点,用第一层数据的parentid去跟表记录里面的id进行匹配,匹配成功那么查找出来的就是第二层数据;上面的那种就是从父级节点往下查找叶子节点。

select rownum from dual connect by rownum<=10;

结果

select * from table_temp
start with id=’001001′
connect by prior id=parent_id;

table_temp表中数据

结果

返回字符串表达式中字符数的字符串函数。

LENGTH(string-expression)

string-expression:字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)

SELECT LENGTH(‘1a2A33a’) AS STR FROM DUAL; –结果:7

到此这篇关于Oracle根据逗号拆分字段内容转成多行的文章就介绍到这了,更多相关Oracle逗号拆分字段内容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Oracle以逗号分隔的字符串拆分为多行数据实例详解Oracle数据行拆分多行方法示例详解oracle管道函数的用法(一行拆为多行)Oracle一行拆分为多行方法实例

© 版权声明

相关文章