2014-09-23 57 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