在写存储过程中,如果传入的参数是以某个特殊符号(如逗号)分隔的字符串,那oracle中如何取到该字符串的各个值呢?
可充分使用regexp_substr函数:
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
举例:将'jack,TOM,caryboy,mari'拆分成集合
select regexp_substr('jack,TOM,caryboy,mari', '[^,]+', 1, level)
from dual
connect by level <= length(regexp_replace('jack,TOM,caryboy,mari' || ',',
'[^,]+',
''));
或者:
SELECT REGEXP_SUBSTR('jack,TOM,caryboy,mari', '[^,]+', 1, LEVEL, 'i') AS STR
FROM DUAL
CONNECT BY LEVEL <=
LENGTH('jack,TOM,caryboy,mari') - LENGTH(REGEXP_REPLACE('jack,TOM,caryboy,mari', ',', '')) + 1;
注:oracle的connect by用法,可获取一个多个数值的列,从而能够让结果以多行的形式展示出来
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7; --结果是level有7行,分别1 2 3 4 5 6 7
附:oracle的正则表达式:
方括号表达示
|
方括号表达式 |
描述 |
|
[[:alnum:]] |
字母和数字混合的字符 |
|
[[:alpha:]] |
字母字符 |
|
[[:cntrl:]] |
控制字符 |
|
[[:digit:]] |
数字字符 |
|
[[:graph:]] |
图像字符 |
|
[[:lower:]] |
小写字母字符 |
|
[[:print:]] |
打印字符 |
|
[[:punct:]] |
标点符号字符 |
|
[[:space:]] |
空格字符 |
|
[[:upper:]] |
大写字母字符 |
|
[[:xdigit:]] |
十六进制数字字符 |
元字符
|
元字符 |
描述 |
|
*? |
如果有前面字符串的0次以上出现时匹配 |
|
+? |
如果有前面字符串的1次以上出现时匹配 |
|
{m} |
m是整数。它文本中找出给定子表达式的恰好m次出现 |
|
{n}? |
前面的字符串只出现一次时匹配 |
|
{m,} |
M是整数。它在文本中找出给定子表达示的至少m次出现 |
|
{n,}? |
匹配前面的字符串至少n次 |
|
{m,n} |
M和n是整数。它在文本中找出给定子表达示的m到n次出现 |
|
{n,m} |
匹配前面的字符串至少到n次,但不多于m次 |
|
c |
查询操作区分大小写 |
|
i |
查询操作不区分大水写 |
|
m |
多行字符串上的查询,在源字符串包含多行时,该查询允许用(^)模式匹配字符串的开始 |
|
n |
通常匹配单个字符,也可以匹配新行 |
|
x |
需要忽略正则表达示中的空格字符时,使用参数‘X’ |
|
\A |
匹配字符串首,而不是行首,因而多行字符串不能匹配每一行 |
|
\d |
匹配任意数字字符 |
|
\D |
匹配任意非数字字符 |
|
\s |
匹配任意空格字符 |
|
\S |
匹配任意非空格字符 |
|
\w |
匹配任意字符和数字。该字符和[:alnum:]之间的不同是\w包括下划线字符 |
|
\W |
匹配任意非空字符串 |
|
* |
通配符。找出在文本中包含0或多次给定子表达式出现的记录 |
|
+ |
找出在文本中包含1或多次给定子表达式出现的记录 |
|
? |
找出在文本中包含0次或1次给定子表达示出现的记录 |
|
. |
匹配文本中的任意字符 |
|
^ |
锚。如果该字符后的表达式出现在行首,则匹配成功 |
|
$ |
锚。如果该字符后的表达式出现在行首,则匹配成功 |
|
| |
分隔符,使用方法和OR相同 |
|
(….) |
分组子表达式 |
本文介绍在Oracle中如何使用REGEXP_SUBSTR函数处理传入的以特殊符号(如逗号)分隔的字符串,将其拆分为各个元素。

5338

被折叠的 条评论
为什么被折叠?



