❶ 在ms sql中如何使用正则表达式,请给出简单示例,注释越详细越好!感激不尽
MSSQL不支持正则表达式,可以用CLR实现。
1、新建一个MSSQL的数据库项目,配置到你的数据库中
2、在数据库项目中新建一个函数库,编写如下代码:
///<summary>
///验证是否符合正则表达式
///</summary>
[SqlFunction]
(stringinput,stringregex)
{
returnnewSqlBoolean(Regex.IsMatch(input,regex,RegexOptions.IgnoreCase));
}
然后在数据库项目上点击“右键”,选择“部署”
PS:此功能需要MSSQL2005或者以上版本支持
如果你使用的是.NET3.5版本的话,需要在数据库服务器上安装.netframework3.5
目前SQLSERVERCLR不支持.NET4.0,所以如果你使用VS2010开发的话需要把项目版本修改成为.NET2.0/3.5
使用方法:
SELECT*FROM[table]WHEREdbo.RegexIsMatch([ID],'^d+$')=1
❷ 如何在SQL Server中使用正则表达式
Create Function [dbo].[IsMatch](@Reg Varchar(1000),@Source Varchar(4000))
returns sql_variant
As
Begin
Declare @Err Int
Declare @obj Int
Declare @Rst sql_variant
EXEC @Err=Sp_OACreate 'VBScript.RegExp',@obj OUTPUT
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'Pattern',@Reg
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'Global','True'
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'IgnoreCase','False'
If @Err<>0 GoTo LB
EXEC @Err=Sp_OAMethod @obj,'Test',@Rst OUTPUT,@source
If @Err<>0 GoTo LB
EXEC @Err=Sp_OADestroy @obj
If @Err<>0 GoTo LB
Return @Rst
LB:
EXEC Sp_OADestroy @obj
RETURN Null
End
--字符串匹配的
Select dbo.IsMatch('\d','12345')
Create Function [dbo].[MyReplace](@Reg Varchar(1000),@Source Varchar(4000),@Str Varchar(1000))
returns sql_variant
As
Begin
Declare @Err Int
Declare @obj Int
Declare @Rst sql_variant
EXEC @Err=Sp_OACreate 'VBScript.RegExp',@obj OUTPUT
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'Pattern',@Reg
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'Global','True'
If @Err<>0 GoTo LB
EXEC @Err=Sp_OASetProperty @obj,'IgnoreCase','False'
If @Err<>0 GoTo LB
EXEC @Err=Sp_OAMethod @obj,'Replace',@Rst OUTPUT,@source,@Str
If @Err<>0 GoTo LB
EXEC @Err=Sp_OADestroy @obj
If @Err<>0 GoTo LB
Return @Rst
LB:
EXEC Sp_OADestroy @obj
RETURN Null
End
--字符串替换的
select dbo.MyReplace('\d','123A454','')
--字符串提取的,这种方法不会搞
--这两个函数需要开启Ole Automation Proceres配置
/*
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ole Automation Proceres',1
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
*/
--CLR的匹配,查找,截取,统计,分割和提取代码我也有,不知道你要不要
❸ 如何在sql语句中使用正则表达式
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' 字符串存在换行的时候当作多行处理.这样$就可匹配每行的结尾.不然的话$只匹配字符串最后的位置、
示例:
select * from emp where regexp_like(ename,'^a[a-z]*n$');
可以查找ename中以a开头以n结尾的行.例如ename为arwen或arwin或anden.但Arwen不能被匹配.因为默认是区分大小写.如果是
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里面的相同.
示例:
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函数
示例:
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函数.
例如:
DECLARE
V_RESULT VARCHAR2(255);
BEGIN
SELECT REGEXP_SUBSTR('hello world','l{2}') INTO V_RESULT
FROM DUAL;
DBMS_OUTPUT.PUT_LINE(V_RESULT);
END ;
结果为ll
查询到匹配的字符串才返回匹配的字符.没查到就返回空。
❹ 怎么样用正则表达式来解析sql语句
sqlserver中,主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四个正则表达式函数。
❺ 如何用java 写一个正则表达式判读一个日志字符串是否包含 sql语句,包含就返回true ,跪求
用正则判断的可能问题是性能差
由于你的日志必然是用某种固定格式输出的sql,所以我觉得还不如匹配与sql无关的关键字符串
❻ sql 2000 正则多关键字搜索
asdas dsjf sdnf jsnd,fnwi,nzsdsiosjagt,m nafasdf sdfdsgf rt azdxfnmkjann ,mzn m,asnri wj4e ,mansf na,fn dsanniAE,MQ
❼ mysql sql语句正则表达式
select * from a where b regexp '王'
❽ 如何在sql server中使用正则表达式
大致步骤是:
1.下载他提供的那个压缩包,里面有源代码和安装脚本
2.将DLL复制到SQL Server规定的目录
3.运行INSTALL.sql这个脚本
大致使用的效果如下
SELECT master.dbo.fn_pcre_match('[email protected]','^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$')
这句脚本的意思是,根据后面的正则表达式(一个email的规则)匹配前面的字符串.
如果返回1的话,表示匹配到了,否则返回0.
❾ sql正则表达式替换姓名数字
sql正则表达式替换姓名数字其实使用正则表达式经营替换,可以采用正则表达式来进行编辑,可以在文档上的函数表达式上进行