SQL Server 2000 中使用正则表达式

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

这两天有个需求,需要在数据库中判断字符串的格式,于是从网上搜集了一些资料,整理了一下。

下面这个是一个自定义函数,用户可以调用这个函数判断指定的字符串是否符合正则表达式的规则.
CREATE FUNCTION dbo.find_regular_expression
 (
  @source varchar(5000),   --需要匹配的源字符串
  @regexp varchar(1000),  --正则表达式
  @ignorecase bit = 0  --是否区分大小写,默认为false
 )
RETURNS bit  --返回结果0-false,1-true
AS
 BEGIN

 --0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
  DECLARE @hr integer 

--用于保存返回的对象令牌,以便之后对该对象进行操作
  DECLARE @objRegExp integer   DECLARE @objMatches integer

--保存结果
  DECLARE @results bit
  
/*
创建 OLE 对象实例,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate,并确定机器中有VBScript.RegExp类库
*/
  EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
/*
以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:
    Dim regEx,Match,Matches         '建立变量。
    Set regEx = New RegExp         '建立一般表达式。
    regEx.Pattern= patrn         '设置模式。
    regEx.IgnoreCase = True         '设置是否区分大小写。
    regEx.Global=True                             '设置全局可用性。
    set Matches=regEx.Execute(string)             '重复匹配集合
    RegExpTest = regEx.Execute(strng)      '执行搜索。
   for each match in matches                    '重复匹配集合
   RetStr=RetStr &"Match found at position "
   RetStr=RetStr&Match.FirstIndex&".Match Value is '"
   RetStr=RetStr&Match.Value&"'."&vbCRLF Next
   RegExpTest=RetStr

*/
  EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END 
--调用对象方法
  EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
--释放已创建的 OLE 对象
  EXEC @hr = sp_OADestroy @objRegExp
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
 RETURN @results
 END

下面是一个简单的测试sql语句,可以直接在查询分析器中运行。
DECLARE @intLength AS INTEGER
DECLARE @vchRegularExpression AS VARCHAR(50)
DECLARE @vchSourceString as VARCHAR(50)
DECLARE @vchSourceString2 as VARCHAR(50)
DECLARE @bitHasNoSpecialCharacters as BIT

-- 初始化变量
SET @vchSourceString = 'Test one This is a test!!'
SET @vchSourceString2 = 'Test two This is a test'

-- 我们的正则表达式应该类似于
-- [a-zA-Z ]{}
-- 如: [a-zA-Z ]{10}  ...  一个十字符的字符串

-- 获得字符串长度
SET @intLength = LEN(@vchSourceString)

-- 设置完整的正则表达式
SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'

-- 是否有任何特殊字符
SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(@vchSourceString, @vchRegularExpression,0)

PRINT @vchSourceString
IF @bitHasNoSpecialCharacters = 1 BEGIN
 PRINT 'No special characters.'
END ELSE BEGIN
 PRINT 'Special characters found.'
END

PRINT '**************'

-- 获得字符串长度
SET @intLength = LEN(@vchSourceString2)

-- 设置完整的正则表达式
SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'

-- 是否有任何特殊字符
SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(@vchSourceString2, @vchRegularExpression,0)

PRINT @vchSourceString2
IF @bitHasNoSpecialCharacters = 1 BEGIN
 PRINT 'No special characters.'
END ELSE BEGIN
 PRINT 'Special characters found.'
END

GO

 
SQLServer使用正则表达式 /*********使用方法**************/ --正则校验(符合为1,不符合为0) SELECT [dbo].[Regex.IsMatch]('^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$','dyuanrong2010@163.com') 符合验证, [dbo].[Regex.IsMatch]('^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$','dyuanrong2010@163com') 不符合验证 --正则替换(将数字替换成空) SELECT [dbo].[Regex.Replace]('[0-9]', 'a12b12c', '') [将数字干掉], [dbo].[Regex.Replace]('[a-z]', 'a12b12c', '*') [将字母替换*] --正则匹配(匹配不为空,不匹配为空) SELECT [dbo].[Regex.Match]('\d+','abcdefghijkl') 不能匹配, [dbo].[Regex.Match]('\d+','0123456789') 能匹配 立即下载

相关推荐

SQL Server使用正则表达式来验证字符串是否满足格式要求的方法

在对应的数据库中新建查询并写入以下代码并执行,注(将中文字符替代为你的真实内容,其他标点符号不要改动)创建好之后,右键项目点击属性,修改目标平台 (这里我的是SQL Server 2016)在数据库中执行以下代码,注(将代码中的中文字替代为你的真实内容,其他符号不要进行改动)若value值为”1”,代表开启,为”0”则表示未开启。若未开启则在SQL Server中执行以下代码。得到如下图的结果 (我的版本是4.8)、创建SQL Server数据库的程序集。语句,得到如下图的结果。

qq_52503563的博客 1119

SQL——正则表达式

正则表达式的基本概念 正则表达式,又称规则表达式,是计算机科学的一个概念。 (英语:Regular Expression,在代码中常简写为regexregexp或RE) 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。 顾名思义,就是一个有规则的表达式,按照这个规则的表达式去搜索匹配这个规则的字符串。 如AXXX;BXXX;这种规则表达式。 正则表达式在数据库的应用 MySQL可以通过LIKE ...%来进行模糊...

kevin1993best的博客 1万+

SQL正则表达式

SQL语句可以搭配正则表达式作为查询条件,实现很多需求。 REGEXP_LIKE 匹配:REGEXP_LIKE(String, Regexp) REGEXP_INSTR 包含 EGEXP_REPLACE 替换 REGEXP_SUBSTR 提取 正则表达式常用字符: 字符 说明 ^ 匹配字符串的开始位置,若用在中括号中[ ] 时,表示不匹配括号中字符串 $ 匹配字符串的末尾,若设置了表达式对象的Multiline属性,则也匹配’/n’或’/r’ . 匹配单个字符 * 匹配

hyfstyle的博客 1万+

深入理解SQL正则表达式:高效文本处理与数据提取

本文深入介绍SQL正则表达式的知识,帮助读者全面了解并应用这一强大的文本处理工具。文章概述了正则表达式的基本概念及在MySQL中的应用,详解了基本语法如字符组、行首行尾匹配。通过丰富示例,展示了实际应用,如查找特定开头的名字、包含数字的字符串等。还讨论了高级语法和捕获组用法,提供更灵活的数据处理。展示了常用的正则表达式元字符,如匹配数字、字母、空白字符。最后,强调注意事项,提醒注意性能和跨行匹配问题。通过本文学习,读者将深刻理解SQL正则表达式,为数据处理提供高效解决方案。

weixin_51076465的博客 6811

SqlServer——正则表达式

LIKE '%[0-9]%' --匹配含有数字的列 LIKE '%[^0-9]%' --匹配含有数字0到9的记录 LIKE '%[A-Z]%' --匹配含有字母的列 LIKE '%[^A-Z]%' --匹配不含有字母的列

qq_37233070的博客 9593

如何在SQL中写正则表达式(适用于Ms SQL Server 2000以上版本)

<br /><br />由于数据库的一个表字段中多包含html标签,现在需要修改数据库的字段把html标签都替换掉。当然我可以通过写一个程序去修改,那毕竟有点麻烦。直接在查询分析器中执行,但是MS SQL Server并没有提供正则表达式,替换html标签可不那么容易。我们可以通过CLR托管来实现一个通过正则表达式来替换html标签的自定义函数。(注:SQL CLR只能在MS SQL Server 2005或以上版本中适用)<br />第一步:通过Visual Studio 2008新建一个SQ

yangbingqi222的专栏 1652

巧用正则批量替换IBATIS中的sql参数注入方式

        最近发现如果sql语句比较长,且参数比较多的时候(很多很多?),在sqlserver2000上预编译速度超慢,sqlserver2005快一倍左右,但还是没有直接执行静态的sql快,本来2秒就能搞定,结果在2000上要20多秒,2005上要10秒左右,jtds驱动预编译更慢. 真是比较晕,为了解决性能问题只能抛弃PreparedStatement了,直接拼装sql执行。好像跑题了,

孙钰佳的博客 3050

T-SQL中的正则表达式

T-SQL中的正则表达式原作者:Cory Koski发表时间:2003/06/24        本文来自Cory Koski。Cory写道:“我最近遇到一个问题,就是试图在数据库域中搜索一个正则表达式。还没有一个版本的SQLServer内部支持正则表达式,但我发现了一个将正则表达式的所有优点添加到你的T_SQL应用的方法。为了更容易的使用正则表达式,我们可以使用自定义函数(User De

C'est la vie 2369

T-SQL中的正则表达式[转载]

原文地址:http://dev.csdn.net/article/23/23661.shtm T-SQL中的正则表达式 原作者:Cory Koski 发表时间:2003/06/24 本文来自Cory Koski。Cory写道:“我最近遇到一个问题,就是试图在数据库域中搜索一个正则表达式。还没有一个版本的SQLServer内部支持正则表达式,但我发现...

weixin_30790841的博客 78

在数据库中用正则表达式查询数据

[list] [*]Mysql5.0及以后直接支持. [/list] [code="sql"]select * from customer where email regexp '@126.com';[/code] [url=http://dev.mysql.com/doc/refman/5.1/en/regexp.html]详细信息参考[/url] [list] [*]MS SQL2...

UC工作室[QQ:5805661 主页: http://www.app4u.com.cn] 164
上一篇: 在SQL Server 2005中用存储过程实现搜索功能
下一篇: T-SQL中的正则表达式
Octavius
博客等级 码龄22年 25粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值