当前位置:首页 » 编程语言 » sqlserver某个字段正则校验
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver某个字段正则校验

发布时间: 2023-01-17 07:53:04

1. 如何在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.

2. 在sql server 2005中建check约束的时候怎么使用正则表达式来匹配某个字段

check (电话号码字段 Like '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') --手机号

3. 怎样用SQL语句判断某个字段内容是否符合日期格式,那个正则表达式怎写请高手帮帮忙。

正则表达式语法 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 这里有...

4. 如何在SQL Server中使用正则表达式

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
查询到匹配的字符串才返回匹配的字符.没查到就返回空。

5. sqlserver 如何查询某个字段是以 字母开头,数字结束的字符串。 正则怎么写谢谢

1> select PATINDEX( '[a-zA-Z]%[0-9]', 'IBM' )
2> go

-----------
0

(1 行受影响)
1> select PATINDEX( '[a-zA-Z]%[0-9]', 'Xbox360' )
2> go

-----------
1

(1 行受影响)
1> select PATINDEX( '[a-zA-Z]%[0-9]', '360' )
2> go

-----------
0

(1 行受影响)

6. sqlserver中正则表达式和分组查询

使用vbscript 或者是frameword程序集向SqlServer数据库中添加一个正则表达式函数,就可以满足你的需求了嘛。
vbscript 函数(需要SqlServer运行环境中vbscript 库)

CREATE function [dbo].[RegexMatchFirst]
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@global bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @objMatch INT
declare @matchcount INT
declare @command varchar(50)
declare @result varchar(5000)
exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'Global', @global
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

exec @hr = sp_OAMethod @objRegExp, 'execute', @objmatch OUTPUT, @source
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end

EXEC @hr= sp_OAGetProperty @objmatch, 'count', @matchcount OUT
IF @hr <> 0 or @objmatch = 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
set @command = 'item(0).Value'
EXEC @hr= sp_OAGetProperty @objmatch, @command, @result OUT

exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end

framework运行时程序集:
打开 Microsoft Visual Studio,创建一个sqlserver 数据库数据库项目,在项目中按照SqlServer方式创建一个正则表达式匹配函数,然后编译部署到你的SqlServer数据库中。
这个时候刷新数据库的可编程性-->函数 --> 标量值函数就会看到你在Microsoft Visual Studio中创建的自定义函数了。

7. 在SQLserver中如何建立一个约束或触发来验证一个字符串中是否含有@字符

create trigger noat
on t_custom--表名
for insert --插入
as
begin tran --事务处理开始
select * from inserted where checknum like'%@%'
if @@rowcount>0 --如果存在@
begin
raiserror('插入的字符串中存在@',16,1)
rollback tran --回滚,不插入数据
return
end
else --如果不存在@
begin
commit tran --提交,插入数据库
return
end
go

8. 在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

9. sqlserver拆分长字段。正则表达式

([\s\S]*?)(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})
正则可以这样写
拆分的话 在代码里面做会方便一些吧