我很疑惑是否可以通過函數對mssql中的敏感數據進行哈希處理,併爲所有字段保留「原樣」的第一個字符。例如:將字符串的所有字符替換爲MSSQL中第一個字符和空格以外的星號
「喬恩·柯克」的名字應該被提取爲J **畝***
我很疑惑是否可以通過函數對mssql中的敏感數據進行哈希處理,併爲所有字段保留「原樣」的第一個字符。例如:將字符串的所有字符替換爲MSSQL中第一個字符和空格以外的星號
「喬恩·柯克」的名字應該被提取爲J **畝***
我已經發布了一個遞歸解決方案首先這是更快:
declare @name varchar(20) = 'Jon Kirk'
declare @loop int = len(@name)
while @loop > 1
select @name = stuff(@name, @loop, 1,
case when substring(@name, @loop-1,2) like '% ' then ' '
when substring(@name, @loop-1,2) like ' %' then substring(@name, @loop,1)
else '*' end), @loop+=-1
select @name
如何像這樣
declare @s varchar(50) = 'Jon kirk'
;with cte as (
select 1 as i, cast (' ' + ltrim (@s) as varchar(50)) as s
union all
select i + 1
, cast (
case when substring (s, i, 2) like '% %'
then s
else stuff (s, i + 1, 1, '*') end
as varchar(50))
from cte
where i < len (s)
)
select top 1 ltrim (s) as s
from cte
order by i desc
這裏是最快的解決方案(雖然不是很漂亮嗎?在所有):
declare @s varchar(50) = 'Jon kirk'
select left (
left (@s, 1)
+ case when substring (@s, 1, 2) like '% %' then substring (@s, 2, 1) else '*' end
+ case when substring (@s, 2, 2) like '% %' then substring (@s, 3, 1) else '*' end
+ ...
+ case when substring (@s, 48, 2) like '% %' then substring (@s, 49, 1) else '*' end
+ case when substring (@s, 49, 2) like '% %' then substring (@s, 50, 1) else '*' end
, len (@s))
如果第一個字母是小寫,那麼怎麼辦? –
查看更新的答案 – GriGrim
我首先嚐試使用遞歸,使用簡單的while循環更有效。在從修改列表中選擇結果之前,您將所有結果存儲在內存中。 –
這兩種解決方案都能正常工作。我非常感謝你的幫助。 – user3382673
找到更快速的解決方案。看到我更新的答案 – GriGrim