sql server中对字段使用正则表达式替换???
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server中对字段使用正则表达式替换???相关的知识,希望对你有一定的参考价值。
sqlserver中对字段使用正则表达式替换?
.replace(num,
'\d','#') 参考技术A sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四个正则表达式函数。
1、regexp_like:
regexp_like(x,pattern[,match_option]),查看x是否与pattern相匹配,该函数还可以提供一个可选的参数match_option字符串说明默认的匹配选项。match_option的取值如下:
'c'
说明在进行匹配时区分大小写(缺省值);
'i'
说明在进行匹配时不区分大小写;
'n'
(.)点号能表示所有单个字符,包括换行(俺还不知道什么地方有用到换行.只知道sql里面可以用chr(10)表示换行、
'm'
字符串存在换行的时候当作多行处理.这样$就可匹配每行的结尾.不然的话$只匹配字符串最后的位置、
示例:
1
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$');
可以查找ename中以a开头以n结尾的行.例如ename为arwen或arwin或anden.但arwen不能被匹配.因为默认是区分大小写.如果是
1
select
*
from
emp
where
regexp_like(ename,'^a[a-z]*n$','i')
则可以查找ename为arwen的行记录。
2、regexp_instr:
regexp_instr(x,pattern[,start[,occurrence[,return_option[,
match_option]]]])用于在x中查找pattern。返回pattern在x中出现的位置。匹配位置从1开始。可以参考字符串函数
instr(),参数相关:
'start'
开始查找的位置;
'occurrence'
说明应该返回第几次出现pattern的位置;
'return_option'
说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的一个字符的位置;若该参数为非0的整数,则说明要返回的整数为x中出现在pattern之后
的字符的位置;
'match_option'
修改默认的匹配设置.与regexp_like里面的相同.
示例:
1
2
3
4
5
6
7
declare
v_result
integer
;
begin
select
regexp_instr('hello
world','o',1,1,0)
into
v_result
from
dual;
dbms_output.put_line(v_result);
end;
结果为5,即字母o第一个次出现的位置。
如果regexp_instr('hello
world','o',1,1,n)其中n为除0之外的整数。比如1,3。则结果为6.表示第一次出现字母o的后面一个字符的位置。
如果regexp_instr('hello
world','o',1,2,0)则结果为9.表示第二次出现字母o的位置.
3、regexp_replace:
regexp_replace(x,pattern[,replace_string[,start[,occurrence[,
match_option]]]])用于在x中查找pattern,并将其替换为replae_string。可以参考字符串函数
replace(),参数同regexp_instr函数
示例:
1
2
3
4
5
6
7
declare
v_result
varchar2(90);
begin
select
regexp_replace('hello
world','o','x',1,1)
into
v_result
from
dual;
dbms_output.put_line(v_result);
end;
结果为hellx
world.
如果regexp_replace('hello
world','o','x'),则结果为hellx
wxrld.
如果
regexp_replace('hello
world','o','x',1,2)则结果为hello
wxrld.
4、regexp_substr:
regexp_substr(x,pattern[,start[,occurrence[,
match_option]]])用于在x中查找pattern并返回。可以参考字符串函数
substr(),参数同regexp_instr函数.
例如:
1
2
3
4
5
6
7
declare
v_result
varchar2(255);
begin
select
regexp_substr('hello
world','l2')
into
v_result
from
dual;
dbms_output.put_line(v_result);
end
;
结果为ll
查询到匹配的字符串才返回匹配的字符.没查到就返回空。
SQL Server中利用正则表达式替换字符串
原文:SQL Server中利用正则表达式替换字符串
建立正则替换函数,利用了OLE对象,以下是函数代码:
--如果存在则删除原有函数
IF OBJECT_ID(N‘dbo.RegexReplace‘) IS NOT NULL
DROP FUNCTION dbo.RegexReplace
GO
--开始创建正则替换函数
CREATE FUNCTION dbo.RegexReplace
(
@string VARCHAR(MAX), --被替换的字符串
@pattern VARCHAR(255), --替换模板
@replacestr VARCHAR(255), --替换后的字符串
@IgnoreCase INT = 0 --0区分大小写 1不区分大小写
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @objRegex INT, @retstr VARCHAR(8000)
--创建对象
EXEC sp_OACreate ‘VBScript.RegExp‘, @objRegex OUT
--设置属性
EXEC sp_OASetProperty @objRegex, ‘Pattern‘, @pattern
EXEC sp_OASetProperty @objRegex, ‘IgnoreCase‘, @IgnoreCase
EXEC sp_OASetProperty @objRegex, ‘Global‘, 1
--执行
EXEC sp_OAMethod @objRegex, ‘Replace‘, @retstr OUT, @string, @replacestr
--释放
EXECUTE sp_OADestroy @objRegex
RETURN @retstr
END
GO
--保证正常运行的话,需要将Ole Automation Procedures选项置为1 ?
EXEC sp_configure ‘show advanced options‘, 1 ?
RECONFIGURE WITH OVERRIDE
EXEC sp_configure ‘Ole Automation Procedures‘, 1 ?
RECONFIGURE WITH OVERRIDE
复制以上代码,到SQL中执行
然后测试,如下
--2.将姓名倒过来
SELECT dbo.RegexReplace(‘John Smith‘, ‘([a-z]+)\s([a-z]+)‘, ‘$2,$1‘,1)
/*
--------------------------------------
Smith,John
*/
以上是关于sql server中对字段使用正则表达式替换???的主要内容,如果未能解决你的问题,请参考以下文章