文章目录

  • Oracle字符串拆分
  • 1. 使用regexp_substr()函数
    • 1.1 拆分aaa,bbb,ccc
    • 1.2 拆分aaa;bbb;ccc
    • 1.3 level作用
  • 2. 在oracle中实现MySQL的find_in_set()函数
    • 2.1 使用oracle的函数定义函数FIND_IN_SET()
    • 2.2 使用FIND_IN_SET()
    • 2.3 删除函数FIND_IN_SET()
  • 3. 使用存储过程输入aaa,bbb,ccc,拆分打印出来
    • 3.1 定义存储过程
    • 3.2 使用块执行存储过程
    • 3.3 删除存储过程

Oracle字符串拆分

比如把一列 a,b,c 拆分为
a
b
c

1. 使用regexp_substr()函数

1.1 拆分aaa,bbb,ccc

SELECTregexp_substr('aaa,bbb,ccc', '[^,]+', 1, LEVEL)
FROMdual
CONNECT BYLEVEL <= LENGTH('aaa,bbb,ccc')-LENGTH(REPLACE('aaa,bbb,ccc', ','))+ 1;

输出结果:

1.2 拆分aaa;bbb;ccc

SELECTregexp_substr('aaa;bbb;ccc', '[^;]+', 1, LEVEL)
FROMdual
CONNECT BYLEVEL <= LENGTH('aaa;bbb;ccc')-LENGTH(REPLACE('aaa;bbb;ccc', ';'))+ 1;

1.3 level作用

SELECT LEVEL FROM dual CONNECT BY LEVEL<10;

2. 在oracle中实现MySQL的find_in_set()函数

2.1 使用oracle的函数定义函数FIND_IN_SET()

FIND_IN_SET(str,strlist)

CREATE OR REPLACE FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')
RETURN NUMBER ISl_idx    number:=0;str      varchar2(500);piv_str  varchar2(500) := piv_str2;res      number:=0;loopIndex number:=0;
BEGINIF instr(piv_str, p_sep, 1) = 0 THENIF piv_str = piv_str1 THENres:= 1;END IF;ELSELOOPl_idx := instr(piv_str,p_sep);loopIndex:=loopIndex+1;IF l_idx > 0 THENstr:= substr(piv_str,1,l_idx-1);IF str = piv_str1 THENres:= loopIndex;EXIT;END IF;piv_str := substr(piv_str,l_idx+length(p_sep));ELSE   IF piv_str = piv_str1 THENres:= loopIndex;END IF;EXIT;END IF;END LOOP;END IF;
RETURN res;
END FIND_IN_SET;

2.2 使用FIND_IN_SET()

  1. 查看aaa是否在aaa,bbb,ccc中
SELECT find_in_set('aaa','aaa,bbb,ccc') FROM dual;

返回1

  1. 查看bbb是否在aaa,bbb,ccc中
SELECT find_in_set('bbb','aaa,bbb,ccc') FROM dual;

返回2

  1. 查看ddd是否在aaa,bbb,ccc中
SELECT find_in_set('ddd','aaa,bbb,ccc') FROM dual;

返回0

2.3 删除函数FIND_IN_SET()

DROP FUNCTION FIND_IN_SET;

3. 使用存储过程输入aaa,bbb,ccc,拆分打印出来

3.1 定义存储过程

CREATE OR REPLACE PROCEDURE SPLIT_STR(STRLIST IN VARCHAR2)ISCURSOR CHECK_FLAG ISSELECT REGEXP_SUBSTR(STRLIST, '[^,]+', 1, LEVEL) F_VALUEFROM DUALCONNECT BY LEVEL <=LENGTH(STRLIST) - LENGTH(REPLACE(STRLIST, ',')) + 1;
BEGINFOR REC IN CHECK_FLAG LOOPDBMS_OUTPUT.PUT_LINE(REC.F_VALUE);END LOOP;
END SPLIT_STR;

3.2 使用块执行存储过程

DECLARE
BEGINSPLIT_STR('aaa,bbb,ccc');
END;

执行结果:

3.3 删除存储过程

DROP PROCEDURE SPLIT_STR;

Oracle字符串拆分相关推荐

  1. oracle字符串清洗、拆分案例

    oracle字符串清洗.拆分案例 需求描述 需求: 对给定的字符,按照点号对其进行拆分并以表的形式返回结果. 解决方法:通过 translate,结合自定义自增表.SUBSTR来实现字符串拆分. SQ ...

  2. Oracle SQL符号分隔的多行字符串拆分

    之前写了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 讨论了从单行字符串拆分到多行字符串拆分,最后的解决不算圆满. 从一个比较简 ...

  3. oracle中有类似split的方法么,Oracle 实现拆分列数据的split()方法

    'one,two,three,four,five,six,seven,eight,nine,zero'as source_string from dual),-- 统计字符串中子串的个数,用 ','来 ...

  4. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  5. oracle字符串提取函数,oracle字符串分割和提取函数定义

    oracle字符串分割和提取函数定义 oracle字符串分割和提取 分割 create or replace function Get_StrArrayLength ( av_str varchar2 ...

  6. ORACLE 字符串超长问题解决方案

    ORACLE 字符串超长问题解决方案 参考文章: (1)ORACLE 字符串超长问题解决方案 (2)https://www.cnblogs.com/joker-zhao/p/4893399.html ...

  7. 在Bash中将字符串拆分为数组

    本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...

  8. c将字符串拆分,并存入结构体

    c将字符串拆分,并存入结构体 函数功能 代码实现 结果显示 函数功能 字符串格式:type=0&u=user1&p=pass1 结构体格式: typedef struct{unsign ...

  9. UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理(c++实现)...

    一.字符编码简单介绍 1. ASCII码 在计算机内部,全部的信息终于都表示为一个二进制的字符串.每个二进制位(bit)有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节(b ...

最新文章

  1. 由创建一个不能被继承的类引发的对象模型的思考
  2. 电脑开机动画_领克的开机画面,你修改了?
  3. 开发者供不应求,垃圾项目在去年已造成2.1万亿美元损失
  4. 【51NOD】1006 最长公共子序列Lcs(动态规划)
  5. php7不解析下载,Centos7 配置apache和php,登陆web提示下载,不解析php文件
  6. pom文件报错_FastDFS实战总结,分布式文件存储,高并发高可用,看这篇就够了...
  7. 力扣-1929 数组串联
  8. js基础知识汇总07
  9. 欧洲航天局遭匿名者(Anonymous)攻击泄露大量数据
  10. 压缩包密码破解-PkCrack(明文攻击)
  11. macOS的计时器:Clocker for Mac
  12. 窗口根据屏幕分辨率自动调整大小
  13. fps透视基础-3分钟快速定位矩阵基址-附3D坐标转屏幕坐标算法
  14. 如何在iPhone和iPad上更改默认浏览器
  15. Uber的启动画面是如何制作的
  16. chrome最新版总是自动清掉保存的密码
  17. Linux:库函数:libc: glibc
  18. Blazor组件自做十三: VideoPlayer 视频播放器
  19. 【论文阅读】An LSTM-Based Deep Learning Approach for Classifying Malicious Traffic at the Packet Level
  20. 三星Odin刷机文件及相关名称解析。

热门文章

  1. 【JVM】调优参数总结
  2. Disruptor 详解
  3. 常见的框图方式有哪些?
  4. ROS与Arduino IDE 安装,比官网详细点(第一次学)
  5. ImageNet 中的 LRN
  6. tensorflow中的lrn函数详解
  7. Python可视化-气泡图
  8. spring项目停止时执行特定代码
  9. include/misc.func.php,Discuz!源码分析与插件开发实例进阶
  10. QT-UI界面设计图标能显示,但是运行时候不显示