Oracle字符串拆分
文章目录
- 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()
- 查看aaa是否在aaa,bbb,ccc中
SELECT find_in_set('aaa','aaa,bbb,ccc') FROM dual;
返回1
- 查看bbb是否在aaa,bbb,ccc中
SELECT find_in_set('bbb','aaa,bbb,ccc') FROM dual;
返回2
- 查看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字符串拆分相关推荐
- oracle字符串清洗、拆分案例
oracle字符串清洗.拆分案例 需求描述 需求: 对给定的字符,按照点号对其进行拆分并以表的形式返回结果. 解决方法:通过 translate,结合自定义自增表.SUBSTR来实现字符串拆分. SQ ...
- Oracle SQL符号分隔的多行字符串拆分
之前写了一篇文章,http://blog.csdn.net/seandba/article/details/72644257 讨论了从单行字符串拆分到多行字符串拆分,最后的解决不算圆满. 从一个比较简 ...
- oracle中有类似split的方法么,Oracle 实现拆分列数据的split()方法
'one,two,three,four,five,six,seven,eight,nine,zero'as source_string from dual),-- 统计字符串中子串的个数,用 ','来 ...
- 每日一题(字符串拆分)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- oracle字符串提取函数,oracle字符串分割和提取函数定义
oracle字符串分割和提取函数定义 oracle字符串分割和提取 分割 create or replace function Get_StrArrayLength ( av_str varchar2 ...
- ORACLE 字符串超长问题解决方案
ORACLE 字符串超长问题解决方案 参考文章: (1)ORACLE 字符串超长问题解决方案 (2)https://www.cnblogs.com/joker-zhao/p/4893399.html ...
- 在Bash中将字符串拆分为数组
本文翻译自:Split string into an array in Bash In a Bash script I would like to split a line into pieces a ...
- c将字符串拆分,并存入结构体
c将字符串拆分,并存入结构体 函数功能 代码实现 结果显示 函数功能 字符串格式:type=0&u=user1&p=pass1 结构体格式: typedef struct{unsign ...
- UTF-8编码的字符串拆分成单字、获取UTF-8字符串的字符个数的代码及原理(c++实现)...
一.字符编码简单介绍 1. ASCII码 在计算机内部,全部的信息终于都表示为一个二进制的字符串.每个二进制位(bit)有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节(b ...
最新文章
- 由创建一个不能被继承的类引发的对象模型的思考
- 电脑开机动画_领克的开机画面,你修改了?
- 开发者供不应求,垃圾项目在去年已造成2.1万亿美元损失
- 【51NOD】1006 最长公共子序列Lcs(动态规划)
- php7不解析下载,Centos7 配置apache和php,登陆web提示下载,不解析php文件
- pom文件报错_FastDFS实战总结,分布式文件存储,高并发高可用,看这篇就够了...
- 力扣-1929 数组串联
- js基础知识汇总07
- 欧洲航天局遭匿名者(Anonymous)攻击泄露大量数据
- 压缩包密码破解-PkCrack(明文攻击)
- macOS的计时器:Clocker for Mac
- 窗口根据屏幕分辨率自动调整大小
- fps透视基础-3分钟快速定位矩阵基址-附3D坐标转屏幕坐标算法
- 如何在iPhone和iPad上更改默认浏览器
- Uber的启动画面是如何制作的
- chrome最新版总是自动清掉保存的密码
- Linux:库函数:libc: glibc
- Blazor组件自做十三: VideoPlayer 视频播放器
- 【论文阅读】An LSTM-Based Deep Learning Approach for Classifying Malicious Traffic at the Packet Level
- 三星Odin刷机文件及相关名称解析。