Показать последние три цифры числового столбца, содержащего значения различной длины, и замаскировать другие - PullRequest
1 голос
/ 06 ноября 2019

В Microsoft SQL Server 2016 у меня есть числовой столбец со значениями различной длины. Я хотел бы отобразить последние три цифры и замаскировать остальные.

РЕДАКТИРОВАТЬ: это можно сделать просто в операторе SELECT без прохождения процесса динамического маскирования данных (создание таблицы, установка разрешений,и т. д.)?

Например:
20639636 23155

Возвращает:
XXXXX636 XX155

Я использовал версию ответа @Alan Burstein. Значения меньше трех цифр возвращают NULL, но это не относится к моим потребностям.

WITH t AS (
SELECT 123456123 AS N UNION
SELECT 12312 UNION
SELECT 1234  UNION
SELECT 333   UNION
SELECT 22
)
SELECT t.N
     , REPLICATE('X', LEN(t.N)-3) + RIGHT(t.N,3) AS N_MASKED
  FROM t
;

N           N_MASKED
22          NULL
333         333
1234        X234
12312       XX312
123456123   XXXXXX123

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Я просматривал ссылку «Динамическое маскирование данных», которую Йогеш поместил в комментариях, но я не уверен, что она делает то, что вы хотите.

Я думаю, что вы должны сделать это следующим образом (будут возвращаться строки, содержащие также 3 символа):

create table test (SomeNumber int)
insert into test (SomeNumber) values (123)
insert into test (SomeNumber) values (1234)
insert into test (SomeNumber) values (1256634)
insert into test (SomeNumber) values (1233436634)

select RIGHT('XXXXXXXXXXXXXXXX' +SUBSTRING(convert(varchar,SomeNumber), LEN(SomeNumber)-2,3),LEN(SomeNumber)) 
from test
0 голосов
/ 06 ноября 2019

Как бы я это сделал:

-- Sample data
DECLARE @t TABLE (N BIGINT);
INSERT @t VALUES (12312),(3322),(123456123),(123456),(123);

-- Solution
SELECT
  Original = t.N, 
  [New]    = REPLICATE('X',l.L)+RIGHT(t.N,3)
FROM        @t AS t
CROSS APPLY (VALUES(LEN(t.N)-3)) AS l(L)
WHERE       l.L > 0; -- Don't need to worry about strings shorter than 4

Возвращает:

Original             New
-------------------- ------------------
12312                XX312
3322                 X322
123456123            XXXXXX123
123456               XXX456
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...