REGEXP_SUBSTR
(
'1,2,3,4'
,
'[^,]+'
,
1
,
ROWNUM
)
dual
CONNECT
BY
ROWNUM
<=
LENGTH
(
'1,2,3,4'
)
-
LENGTH
(
regexp_replace
(
'1,2,3,4'
,
','
,
''
)
)
+
1
;
例如输出 ‘1,2,3,4’多行输出sql如下:SELECT REGEXP_SUBSTR( '1,2,3,4', '[^,]+', 1, ROWNUM )FROM dual CONNECT BY ROWNUM <= LENGTH( '1,2,3,4' ) - LENGTH( regexp_replace( '1,2,3,4', ',', '' )) + 1;
select regexp_substr('444.555.666', '[^.]+', 1, level) col
from dual
connect by level <= regexp_count('444.555.666', '\.') + 1
输出
结果:
多行
拆分
如果数据表存在
多行
数据需要拆分,也可以在原表上使用connect+正则的方法:
在数据存储
数据库
中,常常存在信息以特殊符
号
隔开形式存储在一个字段里,如下表:当我们需要把“去过的城市”字段以逗
号
(,)拆分成
多行
时,如下表:这时就会涉及到列转行,下面跟着我的例子,一起来见证奇迹吧:
插入测试数据:
查询
sql
将代码拷贝使用时,需要更改表名、字段名、
分隔
字符等(注:使用的时候还需将将N替换为
分隔符
的长度,如分割符“、”,长度位1,则将N替换位1,一共4处)。
可以从上截图看出,已经将userinfomation表的city 字段根据“、”
号
分割后,形成
多行
数据。赶快去试试吧。
对
oracle
的
字符串
进行拆分
运行环境:
oracle
11g、pl/
sql
developer
利用
oracle
程序块将"1,2,3,“这个
字符串
进行切割,取出"1”、“2”、"3"来。
可以利用substr函数和instr函数这俩函数,substr函数作为手术刀,instr函数作为标记切割位置的标尺(有点像操作系统里的head,tail那一套)
先回顾一下这俩函数的语法
SUBSTR(
字符串
,截...
ORACLE
中将带
分隔符
的
字符串
拆分成
多行
,有很多方法,我将多种常见和不常见的拆分方法进行了收集整理。 通常这个操作被归类为行列转换的范畴。
为了方便测试,我将每一种方法封装成一个函数,返回一个
字符串
集合。
0.创建自定义集合类型
SQL
> create type t_vchars as table of varchar2(4000);
Type created
最近同事遇到一个问题,需要把一个字段内容按照;
分隔
成
多行
,通过度娘和查资料终于解决了这个问题,下来就来絮叨一下.
刚开始查到的都是replace、substr和instr连用
replace语法:
replace(
字符串
,要被替换的字符,替换后的字符)
substr语法:
substr函数格式 (俗称:字符截取函数)
格式1: substr(string string, int a, int b);
格式2:substr(string string, int a) ;
regexp_substr是
Oracle
数据库
中的一个函数,用于在一个
字符串
中查找并返回符合某个模式的子串。它可以实现
字符串
的
分隔符
切割功能。
regexp_substr函数有三个参数:输入
字符串
、匹配模式以及起始位置。其中,输入
字符串
就是要被切割的原始
字符串
;匹配模式是一个正则表达式,用于
指定
分隔符
的模式;起始位置是可选参数,用于
指定
从哪个位置开始查找匹配的子串,默认为1。
例如,假设有一个
字符串
:"Hello,World,Welcome,to,
Oracle
",我们想使用逗
号
作为
分隔符
,切割出每个单词。可以使用下列
SQL
语句实现:
SELECT regexp_substr('Hello,World,Welcome,to,
Oracle
', '[^,]+', 1, LEVEL)
FROM dual
CONNECT BY regexp_substr('Hello,World,Welcome,to,
Oracle
', '[^,]+', 1, LEVEL) IS NOT NULL;
其中,'Hello,World,Welcome,to,
Oracle
'是输入
字符串
;'[^,]+'是匹配模式,表示匹配一个或多个非逗
号
字符;1是起始位置;LEVEL是层次关系的指示器,用于递归地返回每个匹配的子串。
执行以上
SQL
语句,将得到以下结果:
Hello
World
Welcome
Oracle
即将原始
字符串
按逗
号
分隔
成多个子串。这就是使用regexp_substr函数实现
字符串
分隔符
切割的方法。