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