2014-09-23 66 views
-1

我已經創建了一個數據掩碼,它可以在字符串中的任意位置找到一個16位數的數字,並用X替換除最後四個字符以外的所有字符。SQL Server:更新表 - 數據掩碼

但不是手動設置字符串,我需要更新位於表中的列內的所有數據。請參閱我到目前爲止的代碼:

DECLARE 
    @NOTES AS VARCHAR(8000) 

SET @NOTES = 'Returns the starting position of the first occurrence of a pattern in a specified expression, 1234567891234567 or zeros if the pattern is not found, on all valid text and character data types' 

SELECT 
    REPLACE(@NOTES, SUBSTRING(@NOTES, PATINDEX('%1%2%3%4%5%6%7%8%9%', @NOTES), 16), 'XXXXXXXXXXXX' + RIGHT(SUBSTRING(@NOTES, PATINDEX('%1%2%3%4%5%6%7%8%9%', @NOTES),16),4)) AS REPLACEMENT 

任何幫助,將不勝感激:-)

+0

SO,啥子你在問嗎? 「爲我做我的工作,我不想用我的大腦?」如果你有一個特定的問題(你從「我已經創建」開始表示它已完成工作),那麼你完全沒有理由問這個問題。 – TomTom 2014-09-23 18:36:51

+0

你有什麼具體問題? – usr 2014-09-23 18:38:08

+0

我希望將掩碼應用於更新聲明 – iggyweb 2014-09-23 18:41:49

回答

0

Horaciux提供的函數重新生成靜態聲明字符串,但PATINDEX在u中使用時始終設置爲0更新查詢。

周圍的工作是對PATINDEX實施修改從PATINDEX('%1%2%3%4%5%6%7%8%9%'PATINDEX('%[123456789]%'我已經包含下面的完整功能:

CREATE FUNCTION [dbo].[MyMask](@NOTES VARCHAR(8000)) RETURNS VARCHAR(8000) 
BEGIN 
RETURN 
    REPLACE(@NOTES, SUBSTRING(@NOTES, PATINDEX('%[123456789]%', @NOTES), 16), 'XXXXXXXXXXXX' + RIGHT(SUBSTRING(@NOTES, PATINDEX('%[123456789]%', @NOTES),16),4)) 
END 

我希望這是對他人有用:-)

0

用你的邏輯創建一個函數

CREATE FUNCTION MyMask(
    @NOTES VARCHAR(8000)) 

    returns varchar(8000) 

    BEGIN 
    RETURN 
     REPLACE(@NOTES, SUBSTRING(@NOTES, PATINDEX('%1%2%3%4%5%6%7%8%9%', @NOTES), 16), 'XXXXXXXXXXXX' + RIGHT(SUBSTRING(@NOTES, PATINDEX('%1%2%3%4%5%6%7%8%9%', @NOTES),16),4)) 

    END 

這是你用它誰

update table 
set field = dbo.myMask(field) 
where some condition 
+0

我想,但不知道如何將我提供的代碼應用到函數中。 – iggyweb 2014-09-23 18:52:54

+0

好的,給我一點時間。我將在一個可用的代碼中對其進行轉換 – Horaciux 2014-09-23 18:53:37

+0

非常感謝:-) – iggyweb 2014-09-23 18:53:55