2014-09-23 2 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, WAHT вы спрашиваете? «Сделай свою работу для меня, я не хочу использовать свой мозг?» Если у вас есть конкретная проблема (вы начинаете с «Я создал», указав, что это законченная работа), тогда вы полностью не имеете смысла спрашивать об этом. – TomTom

+0

Какова конкретная проблема, с которой вы сталкиваетесь? – usr

+0

Я хочу применить маску к заявлению об обновлении – iggyweb

ответ

0

Функция, предоставляемая Horaciux, выполняет статическую объявленную строку, но PATINDEX всегда устанавливает значение 0 при использовании в u запрос pdate.

Обходной было изменить реализацию 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

+0

Хорошо, дай мне минуту. Я преобразую это в полезный код – Horaciux

+0

Очень ценю :-) – iggyweb

Смежные вопросы