即興創作的肖恩的答案。
以下將在@text中查找@maskPattern的所有出現,並將其替換爲'x'。 例如,如果@maskPattern = XXXX-XXXX-XXXX-XXXX,它會在@text中找到此模式,並用XXXX-XXXX-XXXX-XXXX替換所有匹配項。如果它沒有發現任何事件,它將保持原樣。
此存儲過程也可以被操縱爲僅屏蔽maskPattern開頭的3/4。乾杯!
ALTER PROCEDURE [dbo].[SP_MaskCharacters] @text nvarchar(max),
@maskPattern nvarchar(500)
AS
BEGIN
DECLARE @numPattern nvarchar(max) = REPLACE(@maskPattern, 'x', '[0-9]')
DECLARE @patternLength int = LEN(@maskPattern)
WHILE (@text IS NOT NULL)
BEGIN
IF PATINDEX('%' + @numPattern + '%', @text) = 0 BREAK;
SET @text =
LEFT(@text, PATINDEX('%' + @numPattern + '%', @text)-1) --Get beginning chars of the input text until first occurance of pattern is found
+ @maskPattern --Append aasking pattern
+ SUBSTRING(@text, PATINDEX('%' + @numPattern + '%', @text) + @patternLength, LEN(@text)) -- Get & append rest of the text found after masking attern
END
SELECT @text
END
這是應用程序代碼更容易設計處理的事情。你說得對,reg ex似乎是要走的路。你可以在C#中做到這一點,並把它放在一個CLR存儲過程中,這樣它可以很容易地從SSMS運行。可悲的是,因爲這是在一個文本字段中,您可能需要確定哪些記錄可能不好,然後讓某人手動檢查它們。畢竟一個零件號碼也可能以最合適的位數結束。我建議做錯誤的數據輸入的人是做手動檢查的人。 – HLGEM
您也可以搜索短語信用卡,卡號,CCN作爲可能包含卡號的記錄的線索。 – HLGEM
我同意HLGEM。另外,考慮在前端添加驗證,以防止未來發生這種情況。您不僅可以告訴用戶不要這樣做,您還可以嘗試檢測是否輸入了卡號,然後需要進行徽章掃描或來自主管的任何內容。這樣,稍後再次成爲問題的可能性就會降低。 –