USE [TEMPDB]
GO
/****** Object: UserDefinedFunction [dbo].[fn_FUZZY] Script Date: 2017/7/28 下午 04:29:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date: 20150212
-- Description: 去識別化ID供JOB_GVReport
-- select dbo.fn_FUZZY(3,0,0,'X','F123456789') //從左邊開始保留,餘取代變數 ##得到 F12XXXXXXX
-- select dbo.fn_FUZZY(3,0,2,'X','F123456789') //從左邊第三位開始取二位,取代變數 ##得到 F12XX56789
-- select dbo.fn_FUZZY(0,5,0,'X','F123456789') //從右邊開始保留,餘取代變數 ##得到 XXXXX56789
-- select dbo.fn_FUZZY(3,0,2,'X','F123456789') //從右邊第三位開始取二位,取代變數 ##得到 F12XX56789
-- 左邊保留位數,右邊保留位數,取幾位,替代的變數,字串
-- 20170523 若長度=1時,則不予處理
-- =============================================
ALTER FUNCTION [dbo].[fn_FUZZY]
(
@left int,
@right int,
@int int,
@strrep CHAR(1),
@str varchar(10)
)
RETURNS VARCHAR(500)
AS
BEGIN
if (@str <> '' and len(@str) > 2)
begin
--左邊保留位數
if (@left <> 0 AND @int = 0)
begin
SET @str = LEFT(@str,@left)+ replicate(@strrep,len(@str)-@left)
end
--左邊保留位數
if (@left <> 0 AND @int <> 0)
begin
SET @str =+ LEFT(@str,@left)+ replicate(@strrep, @int) + RIGHT(@str,len(@str) - (@left+@int))
end
--右邊保留位數
if (@right <> 0 AND @int = 0)
begin
SET @str = replicate(@strrep,len(@str)-@right)+ RIGHT(@str,@right)
end
--右邊保留位數
if (@right <> 0 AND @int <> 0)
begin
SET @str =+ LEFT(@str,len(@str) - (@right+@int))+ replicate(@strrep, @int) + RIGHT(@str,@right)
end
end
RETURN @str
END