sql使用正则表达式替换字符中的一个字
替换某个字段中某一个字
有这样一个需求,替换memo字段中的一个字,例如,将“XXX应付”都替换成“XXX实付”,其他字不变。传统的UPDATE语句做这种更新是非常麻烦的,从10g开始,我们可以使用正则表达式来实现。
select
regexp_replace(memo,
'
应
'
,
'
实
'
) from table_a where code =
'102';
update
table_a a set memo = regexp_replace(memo,
'
应
'
,
'
实
'
) where a.code =
'102';
|
其他正则函数介绍
Regexp_like:正则like
SELECT first_name, last_name FROM employees WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en FIRST_NAME LAST_NAME -------------------- ------------------------- Steven King Steven Markle Stephen Stiles |
Regexp_instr:判断符合正则条件的位数
'500 Oracle Parkway, Redwood Shores, CA'
源字符串
'[s|r|p][[:alpha:]]{6}'
正则模式,以
s|r|p
开头,
6
个字母
3
开始位置,默认是
1
2
Oracle
搜索满足第
2
个模式的发生,默认是
1
1
返回满足模式的后面的字符串,默认是
0
i
大小写不敏感
SELECT REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA', '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR" FROM DUAL; REGEXP_INSTR ------------ 28 |
Regexp_substr
取子串
SELECT REGEXP_SUBSTR('http://www.oracle.com/products', 'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR" FROM DUAL; REGEXP_SUBSTR ---------------------- http://www.oracle.com/
|
Wonder
2008-03-20 );
___FCKpd___3
___FCKpd___4
___FCKpd___5
___FCKpd___6
___FCKpd___7
___FCKpd___8
Regexp_instr:判断符合正则条件的位数
'500 Oracle Parkway, Redwood Shores, CA'
源字符串
'[s|r|p][[:alpha:]]{6}'
正则模式,以
s|r|p
开头,
6
个字母
3
开始位置,默认是
1
2
Oracle
搜索满足第
2
个模式的发生,默认是
1
1
返回满足模式的后面的字符串,默认是
0
i
大小写不敏感
___FCKpd___9 ___FCKpd___10 ___FCKpd___11 ___FCKpd___12 ___FCKpd___13 ___FCKpd___14 ___FCKpd___15 ___FCKpd___16 |
Regexp_substr
取子串
___FCKpd___17 ___FCKpd___18 ___FCKpd___19 ___FCKpd___20 ___FCKpd___21 ___FCKpd___22 ___FCKpd___23 ___FCKpd___24 |
Wonder
2008-03-20