ALTER FUNCTION [dbo].[ReplaceByRegEx_f](@text varchar(2048),@RegEx varchar(200))
RETURNS varchar(2048)
AS
BEGIN
/*
Regext pattern: expr1=repl1|expr2=repl2|
Example: 'asdg109,6d' need 109.6 => RegEx: asdg=|d=|,=.| // | - разделитель. = - знак равенства
--select dbo.ReplaceByRegEx('asdg100,6d','asdg=|d=|,=.|')
*/
if right(@RegEx,1) != '|'
set @RegEx = @RegEx + '|'
declare @v varchar(50),@e1 smallint,@e2 smallint, @r1 smallint,@r2 smallint, @one varchar (100)='', @next smallint
while LEN(@RegEx) > 0
begin
set @next = CHARINDEX('|',@RegEx)
set @one = Substring(@RegEx,1,@next)
set @e1 = 1
set @e2 = charindex('=',@one)-1
set @r1 = charindex('=',@one)+1
set @r2 = charindex('|',@one)-1
if @r2 < @r1
set @text = replace(@text,substring(@one,@e1,@e2),'')
else
set @text = replace(@text,substring(@one,@e1,@e2),substring(@one,@r1,@r2-@r1+1))
set @RegEx = RIGHT(@RegEx,Len(@RegEx)-@next)
end
RETURN @text
END
|