加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SqlServer 正则表达式 函数

(2014-06-13 15:03:05)
标签:

数据库

sqlserver

正则

分类: Sql_DB

-- =============================================
-- 外围正则表达式_函数
-- Soul Guo
-- 2014-06-13 13:55:41
-- Microsoft SQL Server -> 配置工具 -> 外围应用配置器 -> 功能的外围应用配置 -> Ole自动化:支持Ole自动化
-- 如果是2008在数据库服务器 -> 右键 -> 方面 -> 方面(下拉)-> 外围应用配置器
-- =============================================
IF EXISTS(SELECT * FROM sysobjects WHERE [id] = object_id('[regexReplace]'))
DROP FUNCTION [regexReplace]
GO
CREATE FUNCTION [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


下面是例子
-- =============================================
-- Author: Soul Guo
-- Create date: 2014-06-13 13:56:43
-- Description: 替换TCH值函数
-- =============================================
IF EXISTS(SELECT ID FROM sysobjects WHERE [id] = OBJECT_ID('[fun_RegexReplaceTCH]'))
DROP FUNCTION [fun_RegexReplaceTCH]
GO
CREATE FUNCTION [fun_RegexReplaceTCH]
(
-- Add the parameters for the function here
@Source nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
-- Declare the return variable here
DECLARE @Result nvarchar(max)

-- Add the T-SQL statements to compute the return value here
-- 替换>=637的数字
select @Result = dbo.regexReplace(@Source,'6(3[7-9]|[4-9]\d)|[7-9][0-9][0-9]|\d{4,9}','',1,0)
-- 替换95-124区间的数字
select @result = dbo.regexReplace(@result,'\s9[5-9]|1[0-2][0-4]','',1,0)

-- Return the result of the function
RETURN @Result
END
GO



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有