-1

文字列内の任意の場所にある 16 桁の数字を検索し、最後の 4 文字を除くすべてを X に置き換えるデータ マスクを作成しました。

ただし、文字列を手動で設定する代わりに、テーブルにある列内のすべてのデータを更新する必要があります。これまでの私のコードを見てください:

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

どんな助けでも大歓迎です:-)

4

2 に答える 2

0

Horaciux が提供する関数は、静的に宣言された文字列に対して機能しますが、PATINDEX は、更新クエリで使用されると常に 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

これが他の人に役立つことを願っています:-)

于 2014-09-25T10:51:06.243 に答える
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
于 2014-09-23T18:49:11.463 に答える