目录使用场景1.业务表A2.实现拆分sql3.REGEXP_SUBSTR函数1)参数说明2)案例4.REGEXP_REPLACE函数1)参数说明5.CONNECT BY函数1)基本语法2)案例6.LENGTH函数
业务表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)
注意
:字符串最初的位置是1而不是0注意
:分割后最初的字符串会按分割的顺序排列成组注意
:针对的是正则表达式里字符大小写的匹配
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--连接条件
;
也可以写成connect by id= [prior] 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)
SELECT LENGTH('1a2A33a') AS STR FROM DUAL; --结果:7
到此这篇关于Oracle根据逗号拆分字段内容转成多行的文章就介绍到这了,更多相关Oracle逗号拆分字段内容内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
--结束END--
本文标题: Oracle根据逗号拆分字段内容转成多行的函数说明
本文链接: https://www.lsjlt.com/news/201430.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-09
2024-05-09
2024-05-09
2024-05-09
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0