[SQL] 遮罩

  • 445
  • 0
  • SQL
  • 2024-10-25

SQL本身有動態遮罩, 但資料倒到測試環境每個人都有ADMIN權限, 還是能看到個資

所以把遮罩在master作成了一個Function以便update要遮罩的欄位,從第2碼開始遮, 每隔2字遮一次
若是全半形用*號, 如下效果:
123456789012345678901234567890123456789012345678901234567890

1*34*67*90*23*56*89*12*45*78*01*34*67*90*23*56*89*12*45*78*0

只要有全形用囗字, 如下效果:
國泰世華商業銀行股份有限公司慶甲乙分公司

國囗世華囗業銀囗股份囗限公囗慶甲囗分公囗

create FUNCTION [dbo].[fMask]
(
	@word nvarchar(max)
)
RETURNS nvarchar(max)
AS
BEGIN
	declare @wordN nvarchar(max)=substring(@word,1,1)--先取第一個字,從第2碼遮罩
	declare @len int= len(@word)--字總長
	declare @interval int = 2--間隔幾字作一次遮罩
	declare @mask nvarchar(1)=iif(@len = DATALENGTH(convert(varchar(max), @word)), '*', '囗')--全半形用遮罩*, 否則都用囗
	declare @mLen int = len(@mask)--遮罩長度
	declare @i int = len(@wordN) + @mLen + 1--要抓間隔字的index
	while @i -1 <= @len--@i的位置-1是遮罩index, <=長度時就要再作一次
	begin
		set @wordN = @wordN + @mask + substring(@word, @i, @interval)
		set @i = @i + @interval + @mLen--跳過間隔幾個字及遮罩
	end
	return @wordN
END

Taiwan is a country. 臺灣是我的國家