SQL字符正则匹配


Method1:

declare   @tempStr   varchar ( 100 )
declare   @tempRet   varchar ( 20 )
select   @tempStr   =   ' 0102017010101162873.4邓湘江56.5064.9512 '
select   @tempRet   =   replace ( replace ( replace ( replace ( replace ( replace ( replace ( replace ( replace ( replace ( replace ( @tempStr , ' 0 ' , '' ), ' 1 ' , '' ), ' 2 ' , '' ), ' 3 ' , '' ), ' 4 ' , '' ), ' 5 ' , '' ), ' 6 ' , '' ), ' 7 ' , '' ), ' 8 ' , '' ), ' 9 ' , '' ), ' . ' , '' )
print   @tempRet

Method2:

print  dbo.regexReplace( ' 0102017010101162873.4邓湘江56.5064.9512 ' , ' [0-9.] ' , '' , 1 , 1 )

create   function  dbo.regexReplace
(
@source   varchar ( 5000 ),     -- 原字符串
@regexp   varchar ( 1000 ),     -- 正则表达式
@replace   varchar ( 1000 ),    -- 替换值
@globalReplace   bit   =   0 ,    -- 是否是全局替换
@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
GO

你可能感兴趣的:(sql)