Как изменить данные на * но только 50% слова - PullRequest
1 голос
/ 11 июля 2020

newb ie здесь. Хотите знать, есть ли шанс изменить слова на сервере sql на *, но только 50% данных? Пример: выберите имя из биоданных

Результат:

1. Mountain
2. Grace
3. Yellow

Ожидаемый результат это

1. Moun****
2. Gr***
3. Yel***

Thabk you in аванс

Ответы [ 3 ]

2 голосов
/ 11 июля 2020

Я думаю, это то, что вы хотите, с сохранением длины слова:

select word,
       left(left(word, len(word) / 2.0) + replicate('*', len(word)), len(word))
from (values ('Mountain'), ('Grace'), ('Yellow')) v(word);
1 голос
/ 11 июля 2020

Попробуйте следующее:

select concat (
               substring(Name, 1, LEN(Name)/2),
               replicate('*', LEN(Name)/2)
              ) 
from biodata

-> substring(Name, 1, LEN(Name)/2) получит первую половину имени

-> replicate('*', LEN(Name)/2) будет повторять * для оставшейся половины имя

-> И, наконец, Concat() соединит обе строки.

0 голосов
/ 11 июля 2020

Сочетание len(), stuff() и replicate() может привести вас туда.

Используйте len(), чтобы получить длину слова. Используйте replicate(), чтобы создать строку звездочек нужной длины, и используйте stuff(), чтобы заменить конец слова звездочками. Вы также можете использовать left() и конкатенацию вместо stuff().

Например:

declare @string varchar(10) = 'abcdefghij'
select len(@string) -- returns 10
select left(@string, len(@string) / 2) -- returns 'abcde'
select replicate('*', len(@string) / 2) -- returns '*****'
select left(@string, len(@string) / 2) + replicate('*', len(@string) / 2) -- returns 'abcde*****'

Я предоставлю вам решать, как вы хотите обрабатывать строки с нечетным количество символов и то, как аккуратно организовать код для работы со всем столбцом, а не с одной переменной. Обратите внимание, что функция len() используется многократно, поэтому вы можете исключить это, например, используя cross apply.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...