`
Harold_xlp
  • 浏览: 159195 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

在SQLServer中使用正则表达式

阅读更多
本文来自:
http://www.cnblogs.com/sdlfx/archive/2011/01/23/1942696.html

sqlserver对于字符串的处理比较弱,replace函数也仅仅支持用字符串来作为匹配项,要是需要使用正则表达式,就只能通过系统存储过程来调用VB组件来实现了,下面是两个写好的正则函数:

测试是否匹配:

GO
CREATE FUNCTION dbo.regexIsMatch
(
@source varchar(5000),   --需要匹配的源字符串
@regexp varchar(1000),  --正则表达式
@ignorecase bit = 0  --是否区分大小写,默认为false
)
RETURNS bit  --返回结果-false,-true
AS
BEGIN

--1(成功),是由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

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正则替换:

GO
--SQL正则替换函数
CREATE FUNCTION dbo.regexReplace
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
RETURNS varchar(1000) AS
BEGIN
DECLARE @hr integer
DECLARE @objRegExp integer
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', @globalReplace
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, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 BEGIN
EXEC @hr = sp_OADestroy @objRegExp
RETURN null
END
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
RETURN null
END

RETURN @result
END    关键是sp_OACreate,sp_OADestroy,sp_OASetProperty,sp_OAMethod这几个存储过程的使用,在《编写扩展存储过程》一文里也有这个用法。     测试替换函数:print dbo.regexReplace('sfasdf234sdfds', '\D', '', 1, 0)     使用时需要开启对OLE存储过程的使用:    exec sp_configure 'Ole Automation Procedures', 1 reconfigure     在设置此配置时有可能会提示“配置选项'Ole Automation Procedures' 不存在,也可能是高级选项。”的错误,解决办法是在配置之前执行语句:    exec sp_configure 'show advanced options',1 reconfigure
分享到:
评论

相关推荐

    在sqlserver2008r2版本中实现正则表达式

    此外,还有SQL Server Management Studio (SSMS) 的插件,如RegEx Query Builder,可以帮助在查询中使用正则表达式。 4. **模拟正则表达式** 在没有内置支持的情况下,还可以使用T-SQL的一些内置函数和操作符来...

    SQLServer中使用正则表达式

    /*********使用方法**************/ --正则校验(符合为1,不符合为0) SELECT [dbo].[Regex.IsMatch]('^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$','dyuanrong2010@163.com') 符合验证, [dbo].[Regex...

    sql_server 正则表达式

    要在SQL Server中使用这些函数,首先需通过CREATE ASSEMBLY语句注册相应的程序集,然后使用扩展后的CREATE FUNCTION语句创建指向CLR UDFs的接口。这一过程在Visual Studio 2005中被大大简化,项目构建时,IDE会自动...

    SQL 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    在这个主题中,我们将深入探讨SQL语法分析、正则表达式的应用以及如何在C#中使用正则表达式来解析文件。 首先,SQL语法分析是理解和执行SQL查询的关键步骤。当一个SQL语句被提交到数据库管理系统时,系统会对其进行...

    用正则表达式提取SQL

    标题“用正则表达式提取SQL”涉及到的是在编程中如何使用正则表达式来从文本或代码中抓取SQL语句的相关知识。在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能快速地匹配、查找、替换或者...

    SqlServer类似正则表达式的字符处理问题

    SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有: 1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个...

    正则表达式在SQL Server 2000中的实现与应用.pdf

    在SQL Server 2000中,虽然标准的正则表达式支持并不内置,但开发者仍然可以通过一些方式来实现正则表达式的功能。这主要依赖于T-SQL的内置函数和一些用户定义的函数(UDF)来模拟正则表达式的行为。下面将详细介绍...

    SQL Server中利用正则表达式替换字符串的方法

    上述内容中介绍了在不支持正则表达式的SQL Server版本中,如何建立一个自定义的正则替换函数dbo.RegexReplace。此函数通过调用OLE对象的sp_OACreate存储过程创建VBScript的RegExp对象,设置RegExp对象的属性,然后...

    正则表达式从入门到精通

    深入学习正则表达式,不仅需要理解这些基本概念,还需要掌握如何在不同上下文中应用它们,包括如何处理Unicode字符、优化正则表达式性能以及在不同编程语言中使用正则表达式的差异。此外,实战练习和解决实际问题是...

    Regular Expressions in MS SQL Server 20052008

    2. 在SQL Server中使用正则表达式 - CLR集成:通过编写.NET Framework的C#或VB.NET代码,并将其作为用户自定义函数(UDF)部署到SQL Server中,可以实现正则表达式的功能。 - 扩展存储过程:如 `mssql_regex` 扩展...

    C#正则表达式提取网页数据

    本主题聚焦于利用C#的正则表达式功能来从网页中提取数据,并将其存储到SQL Server 2005数据库。下面将详细阐述这一过程中的关键知识点。 一、正则表达式(Regular Expression) 正则表达式是一种强大的文本处理工具...

    jsp+正则表达式实用总结

    在IT行业中,JavaServer Pages(JSP)与正则表达式是两种非常重要的技术,它们在网页开发和数据处理中起着至关重要的作用。这篇内容将深入探讨JSP与正则表达式的结合使用,以及它们在实际项目中的应用。 首先,JSP...

    T-SQL中使用正则表达式函数

    这篇文章将探讨如何在T-SQL中使用正则表达式的函数。 首先,我们看到作者在Visual Studio Team Services(VSTS,现在称为Azure DevOps)中创建了一个Database Project,并添加了一个类,该类包含一个名为`RegEx...

    用C#正则表达式实现的百度体育新闻的抓取

    在本文中,我们将深入探讨如何使用C#编程语言和正则表达式来实现百度体育新闻的抓取。C#是一种广泛应用于Windows平台的面向对象的编程语言,它提供了丰富的类库支持网络通信和数据处理。正则表达式则是用于文本模式...

    使用正则表达式匹配tsql注释语句

    在本文中,我们将探讨如何使用正则表达式有效地匹配T-SQL(Transact-SQL)中的注释。 首先,让我们回顾一下T-SQL单行注释的基本形式: ```sql -- 这是一条注释 ``` 正则表达式的目的是找到所有以`--`开头直到行尾的...

    c#通讯录 主要用到了数据库和c#中的正则表达式

    在这个通讯录项目中,可能使用了SQL Server Compact Edition或SQLite这样的轻量级数据库,以便持久化存储联系人信息。 1. **ADO.NET**:C#通过ADO.NET库与数据库进行交互,包括创建连接、执行SQL语句、填充数据集等...

    ASP_NET正则表达式

    3. ASP.NET中使用正则表达式的实例 - 在ASP.NET表单验证中,`RegularExpressionValidator`控件可以配合`RegularExpression`属性,实现客户端和服务器端的数据验证。 - 示例:验证邮箱地址,`...

Global site tag (gtag.js) - Google Analytics