2017-02-07 4 views
1

У меня есть один седловины в моем столе, как:запросов SQL Server Вывод со сценарием SQL заменить значения с «х»

COL 
[email protected] 
[email protected] 

Я хочу, чтобы мой выход что-то вроде этого:

COL 
[email protected] 
[email protected] 

iyara заменен 5x-х (ххххх) и 'кира' с 4-кратным (в хххх)

+1

Вы попробовали что-нибудь еще! –

+1

@Tanner Да, я пробовал, но я могу получить выход как Kx @ ymail.com, только один «x», но мне нужно, чтобы значение «x» было реплицировано в соответствии с длиной символов, которые заменяются. –

+0

SELECT STUFF (mailid, 2, CHARINDEX ('@', mailid) -2, REPLICATE ('x', LEN (CHARINDEX ('@', mailid) -2))) как mailid FROM #TT -> mailId is столбец в таблице #TT –

ответ

4

Там, наверное, лучший способ сделать это, что это, но это достигается то, что вы после:

DECLARE @email NVARCHAR(50) = '[email protected]'; 

SELECT LEFT(@email, 1) + REPLICATE('X', 
            LEN(SUBSTRING(@email, 2, 
                CHARINDEX('@', @email) - 1))) 
     + SUBSTRING(@email, CHARINDEX('@', @email), LEN(@email)); 

-- Result: [email protected] 

Это использует REPLICATE() метод, который в соответствии с Документами онлайн начинается с SQL Server 2008 .

REPLICATE (Transact-SQL)

повторяет string значение определенное количество раз.

REPLICATE (string_expression ,integer_expression)

+0

Спасибо! Он дает результат, как ожидалось. –

1
SELECT LEFT(col, 1) + RIGHT('xxxxxxxxxxxxxxxx', CHARINDEX('@', col) - 2) + 
     SUBSTRING(col, CHARINDEX('@', col), LEN(col) - CHARINDEX('@', col) + 1); 

Объяснение:

Возьмите [email protected] в качестве примера, и каждая часть моего запроса показан здесь.

K   LEFT(col, 1) 
xxxxx  RIGHT('xxxxxxxxxxxxxxxx', CHARINDEX('@', col) - 2) 
@ymail.com SUBSTRING(col, CHARINDEX('@', col), LEN(col) - CHARINDEX('@', col) + 1) 

Обратите внимание, что вы можете заменить вызов RIGHT() со строкой x «s достаточно долго, чтобы соответствовать вашему длинному ожидаемому имени электронной почты.

0
declare @n nvarchar(max) 
set @n='[email protected]' 
select concat(substring(@n,1,1),replicate('X',len(substring(@n,2,charindex('@',@n,1)-2))),SUBSTRING(@n,charindex('@',@n),200)) 

В этом с помощью O подстроки вы нашли первую букву анс затем остальную часть он письма сезам @ т.е. Iyara ищется с помощью CHARINDEX анс подстроку, которая будет преобразована в «х 'используя функцию репликации, а затем отпечатайте идентификатор.

+0

Хотя этот фрагмент кода может решить вопрос, в том числе объяснение * how * и * why *, это решает проблему [действительно поможет] (// meta.stackexchange.com/q/114762), чтобы улучшить качество вашей публикации , Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. –