本文来自:
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
分享到:
相关推荐
此外,还有SQL Server Management Studio (SSMS) 的插件,如RegEx Query Builder,可以帮助在查询中使用正则表达式。 4. **模拟正则表达式** 在没有内置支持的情况下,还可以使用T-SQL的一些内置函数和操作符来...
/*********使用方法**************/ --正则校验(符合为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中使用这些函数,首先需通过CREATE ASSEMBLY语句注册相应的程序集,然后使用扩展后的CREATE FUNCTION语句创建指向CLR UDFs的接口。这一过程在Visual Studio 2005中被大大简化,项目构建时,IDE会自动...
在这个主题中,我们将深入探讨SQL语法分析、正则表达式的应用以及如何在C#中使用正则表达式来解析文件。 首先,SQL语法分析是理解和执行SQL查询的关键步骤。当一个SQL语句被提交到数据库管理系统时,系统会对其进行...
标题“用正则表达式提取SQL”涉及到的是在编程中如何使用正则表达式来从文本或代码中抓取SQL语句的相关知识。在IT领域,正则表达式(Regular Expression)是一种强大的文本处理工具,它能快速地匹配、查找、替换或者...
SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有: 1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个...
在SQL Server 2000中,虽然标准的正则表达式支持并不内置,但开发者仍然可以通过一些方式来实现正则表达式的功能。这主要依赖于T-SQL的内置函数和一些用户定义的函数(UDF)来模拟正则表达式的行为。下面将详细介绍...
上述内容中介绍了在不支持正则表达式的SQL Server版本中,如何建立一个自定义的正则替换函数dbo.RegexReplace。此函数通过调用OLE对象的sp_OACreate存储过程创建VBScript的RegExp对象,设置RegExp对象的属性,然后...
深入学习正则表达式,不仅需要理解这些基本概念,还需要掌握如何在不同上下文中应用它们,包括如何处理Unicode字符、优化正则表达式性能以及在不同编程语言中使用正则表达式的差异。此外,实战练习和解决实际问题是...
2. 在SQL Server中使用正则表达式 - CLR集成:通过编写.NET Framework的C#或VB.NET代码,并将其作为用户自定义函数(UDF)部署到SQL Server中,可以实现正则表达式的功能。 - 扩展存储过程:如 `mssql_regex` 扩展...
本主题聚焦于利用C#的正则表达式功能来从网页中提取数据,并将其存储到SQL Server 2005数据库。下面将详细阐述这一过程中的关键知识点。 一、正则表达式(Regular Expression) 正则表达式是一种强大的文本处理工具...
在IT行业中,JavaServer Pages(JSP)与正则表达式是两种非常重要的技术,它们在网页开发和数据处理中起着至关重要的作用。这篇内容将深入探讨JSP与正则表达式的结合使用,以及它们在实际项目中的应用。 首先,JSP...
这篇文章将探讨如何在T-SQL中使用正则表达式的函数。 首先,我们看到作者在Visual Studio Team Services(VSTS,现在称为Azure DevOps)中创建了一个Database Project,并添加了一个类,该类包含一个名为`RegEx...
在本文中,我们将深入探讨如何使用C#编程语言和正则表达式来实现百度体育新闻的抓取。C#是一种广泛应用于Windows平台的面向对象的编程语言,它提供了丰富的类库支持网络通信和数据处理。正则表达式则是用于文本模式...
在本文中,我们将探讨如何使用正则表达式有效地匹配T-SQL(Transact-SQL)中的注释。 首先,让我们回顾一下T-SQL单行注释的基本形式: ```sql -- 这是一条注释 ``` 正则表达式的目的是找到所有以`--`开头直到行尾的...
在这个通讯录项目中,可能使用了SQL Server Compact Edition或SQLite这样的轻量级数据库,以便持久化存储联系人信息。 1. **ADO.NET**:C#通过ADO.NET库与数据库进行交互,包括创建连接、执行SQL语句、填充数据集等...
3. ASP.NET中使用正则表达式的实例 - 在ASP.NET表单验证中,`RegularExpressionValidator`控件可以配合`RegularExpression`属性,实现客户端和服务器端的数据验证。 - 示例:验证邮箱地址,`...