ORACLE内置函数大全补充(正则表达式函数)

1.regexp_like : 只能用于条件表达式 , 和 like 功能相似 , 进行条件匹配
如 : regexp_like(t.value,'(^(12)$|^(12,)|(,12,)|(,12)$)')--正则表达式中的|前后不能有空
判断字符串中某个值是否存在

2.regexp_substr : 截取符合正则表达式描述的字符串
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式,匹配的值将返回,返回策略由__occurrence决定
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式(’i’不区分大小写进行检索,’c’区分大小写进行检索。默认为’c’。)

SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,1,'i') AS STR FROM DUAL; 
结果: 
STR
-----
17

2、查询使用正则分割后的最后一个值,也就是23
[sql] 
SELECT REGEXP_SUBSTR('17,20,23','[^,]+',1,3,'i') AS STR FROM DUAL; 
结果:
STR
----
23


[sql] 
SELECT REGEXP_SUBSTR('17,20,23', '[^,]+', 1, LEVEL, 'i') AS STR 
FROM DUAL 
CONNECT BY LEVEL <= 
LENGTH('17,20,23') - LENGTH(REGEXP_REPLACE('17,20,23', ',', ''))+1; 
结果: 
STR
----
17
20
23

3.regexp_instr : 和 instr 类似,用于标定符合正则表达式的字符子串的开始位置
语法

REGEXP_INSTR (source_char, pattern [, position [, occurrence [, return_option [, match_parameter ] ] ]  ] )
source_char
搜索值的字符表达式,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB的。

position
可选。搜索在字符串中的开始位置。如果省略,则默认为1,这是字符串中的第一个位置。

occurrence
可选。它是模式字符串中的第n个匹配位置。如果省略,默认为1return_option
可选 指定oracle返回的位置:
如果指定0,那么Oracle将返回出现的第一个字符的位置。这是默认的。
如果指定1,则Oracle返回字符之后发生的位置。

match_parameter
可选。它允许你修改REGEXP_INSTR功能匹配的行为。

示例

SELECT REGEXP_INSTR ('hello itmyhome', 'e')
FROM dual; 
-- Result: 2

SELECT REGEXP_INSTR ('my is itMyhome', 'm', 1, 2, 0, 'c')
FROM dual; 
-- Result: 13

SELECT REGEXP_INSTR ('Itmyhome', 'a|i|o|e|u')
FROM dual;
-- Result: 6

4.regexp_replace : 和 replace 类似,用于替换符合正则表达式的字符串
语法

REGEXP_REPLACE(source_char, pattern [, replace_string [, position [, occurrence [, match_parameter ] ] ] ] )

source_char
搜索值的字符表达式。这通常是一个字符列,可以是任何数据类型CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB。

pattern
正则表达式

replace_string
可选。匹配的模式将被替换replace_string字符串。如果省略replace_string参数,
将删除所有匹配的模式,并返回结果字符串。

position
可选。在字符串中的开始位置搜索。如果省略,则默认为1。

occurrence
可选。是一个非负整数默认为1,指示替换操作的发生:
如果指定0,那么所有出现将被替换字符串。
如果指定了正整数n,那么将替换第n次出现。

match_parameter
可选。它允许你修改REGEXP_REPLACE功能匹配的行为。

示例

SELECT REGEXP_REPLACE ('itmyhome is my network id', '^(\S*)', 'luck')
FROM dual;
Result: luck is my network id

SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '\d', '#')
FROM dual;
Result: '#, #, and ## are numbers in this example'

SELECT REGEXP_REPLACE ('2, 5, and 10 are numbers in this example', '(\d)(\d)', '#')
FROM dual;
Result: '2, 5, and # are numbers in this example'

你可能感兴趣的:(oracle)