Oracle根据逗号拆分字段内容转成多行的函数说明

 更新时间:2023年04月12日 10:41:35   作者:EstherLty  
在做系统时经常会遇到在一个字段中,用逗号或其他符号分隔存储多个信息,下面这篇文章主要给大家介绍了关于Oracle根据逗号拆分字段内容转成多行的函数说明,需要的朋友可以参考下

使用场景

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

1.业务表A

SELECT * FROM app_template_dept t WHERE t.evaluate_index_code ='3330326';

2.实现拆分SQL

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;

3.REGEXP_SUBSTR函数

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

1)参数说明

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

  • String: 需要进行正则处理的字符串
  • pattern:进行匹配的正则表达式
  • position:起始位置,从第几个字符开始正则表达式匹配(默认为1)
    注意:字符串最初的位置是1而不是0
  • occurrence:标识第几个匹配组,默认为1
    注意:分割后最初的字符串会按分割的顺序排列成组
  • modifier:模式('i’不区分大小写进行检索;‘c’区分大小写进行检索。默认为’c’。)
    注意:针对的是正则表达式里字符大小写的匹配

2)案例

/*从第一个字符开始按照字符'A'(区分大小写)分割字符串'1a2A33a',取第二个分割出来的数据*/
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

/*把要输出来的第几个子串,通过一个变量ROWNUM转换成输出多少个子串。level<=5代表的是输出5个,没有的为null*/
SELECT REGEXP_SUBSTR('1a2A33a','[^A]+',1,Level,'i') AS STR FROM DUAL CONNECT BY LEVEL<=5; --结果:1、2、33、null、null

4.REGEXP_REPLACE函数

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

1)参数说明

REGEXP_REPLACE(VARCHAR str, VARCHAR pattern, VARCHAR replacement)

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

SELECT REGEXP_REPLACE('1a2A33a','A','') AS STR FROM DUAL; --结果:1a233a

5.CONNECT BY函数

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

1)基本语法

select ... from
where ... --过滤条件,用于对返回的所有记录进行过滤。
[start with ...] --查询结果重起始根结点的限定条件。
connect by [prior] id=parentid--连接条件
; 
  • start with:用来限制第一层的数据,或者叫根节点数据,以这部分数据为基础来查找第二层数据,然后以第二层数据查找第三层数据以此类推。
  • connect by [prior] id=parentid :这部分是用来指明oracle在查找数据时以怎样的一种关系去查找,比如说查找第二层的数据时用第一层数据的id去跟表里面记录的parentid字段进行匹配,如果这个条件成立那么查找出来的数据就是第二层数据,同理查找第三层第四层…等等都是按这样去匹配。

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

2)案例

select rownum from dual connect by rownum<=10;

结果

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

table_temp表中数据

结果

6.LENGTH函数

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

1)参数说明

LENGTH(string-expression)

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

2)案例

SELECT LENGTH('1a2A33a') AS STR FROM DUAL; --结果:7

总结

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

相关文章

  • Oracle merge合并更新函数实例详解

    Oracle merge合并更新函数实例详解

    这篇文章主要给大家介绍了关于Oracle merge合并更新函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • oracle数据库被锁定的解除方案

    oracle数据库被锁定的解除方案

    文章主要介绍了如何查询和解除Oracle数据库中被锁定的表,通过执行特定的SQL语句,可以获取被锁定表的相关信息,并通过指定会话ID和序列号来解除锁定,同时,文章提醒执行此操作时需要谨慎,确保了解其影响
    2024-11-11
  • Oracle如何设置表空间数据文件大小

    Oracle如何设置表空间数据文件大小

    这篇文章主要介绍了Oracle如何设置表空间数据文件大小,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Oracle 错误日志表及异常处理包详解 附源码

    Oracle 错误日志表及异常处理包详解 附源码

    这篇文章主要介绍了Oracle 错误日志表及异常处理包详解 附源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • ORACLE两表关联更新三种方式

    ORACLE两表关联更新三种方式

    这篇文章主要介绍了ORACLE两表关联更新三种方式,文章通过代码示例和图文结合的方式给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-05-05
  • [Oracle] dbms_metadata.get_ddl 的使用方法总结

    [Oracle] dbms_metadata.get_ddl 的使用方法总结

    以下是对Oracle中dbms_metadata.get_ddl的用法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 修改oracle数据库用户名及密码的方法

    修改oracle数据库用户名及密码的方法

    有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一些操作,又不能去修改掉这个用户的密码,这个时候,就可以利用一些小窍门,来完成操作
    2015-01-01
  • 解决Oracle删除重复数据只留一条的方法详解

    解决Oracle删除重复数据只留一条的方法详解

    本篇文章是对Oracle删除重复数据只留一条的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • MSSQL与Oracle数据库事务隔离级别与锁机制对比

    MSSQL与Oracle数据库事务隔离级别与锁机制对比

    事务隔离级别是并发控制的整体解决方案,其实际上是综合利用各种类型的锁和行版本控制,来解决并发问题。锁是数据库并发控制的内部机制,是基础。对用户来说,只有当事务隔离级别无法解决一些并发问题和需求时,才有必要在语句中手动设置锁。
    2014-08-08
  • 自动备份Oracle数据库

    自动备份Oracle数据库

    自动备份Oracle数据库...
    2007-03-03

最新评论