我创建了一个数据掩码,在字符串中的任何位置找到一个16位数字,并用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
非常感谢任何帮助: - )
答案 0 :(得分: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
答案 1 :(得分: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
我希望这对其他人有用: - )