Есть ли способ ВЫБРАТЬ первый и последний 2 символа и ЗАМЕНИТЬ все остальные символы *, как показано ниже?SQL-сервер: Заменить, кроме первого и последнего символов
WA***RT
EX*** ***IL
CH***ON
BE******* *****AY
AP*LE
Заранее благодарен!
Есть ли способ ВЫБРАТЬ первый и последний 2 символа и ЗАМЕНИТЬ все остальные символы *, как показано ниже?SQL-сервер: Заменить, кроме первого и последнего символов
WA***RT
EX*** ***IL
CH***ON
BE******* *****AY
AP*LE
Заранее благодарен!
Пробелы пропущено:
SELECT
name,
[hidden] = CASE WHEN LEN(name) <= 4 THEN name
ELSE CONCAT(LEFT(name, 2),REPLICATE('*', LEN(name)- 2),RIGHT(name,2))
END
FROM #tab;
Если вам нужны пробелы и есть только один вы можете использовать:
SELECT name,
[hidden] = CASE
WHEN LEN(name) <= 4 THEN name
WHEN CHARINDEX(' ', name) > 0
THEN STUFF(CONCAT(LEFT(name, 2),REPLICATE('*', LEN(name) - 2) ,
RIGHT(name,2)), CHARINDEX(' ', name),1, ' ')
ELSE CONCAT(LEFT(name, 2),REPLICATE('*', LEN(name) - 2) ,RIGHT(name,2))
END
FROM #tab;
Если вы используете версию ниже чем SQL Server 2012
строка конкатенации с +
.
Удивительная ссылка для LiveDemo. Я обязательно буду использовать это в будущем! –
На всякий случай кто-то видит это и думает скопировать + вставить, не проверяя его, 'LEN (name) - 4)', а не 'LEN (name) - 2)' (в настоящее время он добавляет дополнительную пару * s) –
Вы можете использовать STUFF
.
SELECT STUFF(col, 3, LEN(col)-4, REPLICATE('*',LEN(col)-4))
Это не сохраняет пробелы.
Чтобы сохранить N пространства, вы можете просто "добавить обратно пространства" с STUFF снова:
SELECT col,
masked =
coalesce(
-- handle 2 spaces
STUFF(STUFF(
STUFF(col, 3, LEN(col)-4, REPLICATE('*',LEN(col)-4)),
CHARINDEX(' ', col), 1, ' '),
CHARINDEX(' ', col, CHARINDEX(' ', col)+1), 1, ' '),
-- handle 1 spaces
STUFF(
STUFF(col, 3, LEN(col)-4, REPLICATE('*',LEN(col)-4)),
CHARINDEX(' ', col), 1, ' '),
-- normal masking
STUFF(col, 3, LEN(col)-4, REPLICATE('*',LEN(col)-4)),
-- too short to mask
col
)
select left(col, 2) + REPLICATE('*',len(col)-4) + right(col,2) from table;
Но вы хотите сохранить пространство? – jarlh
Возможный дубликат [Заменить все символы строки на звездочки, кроме первых символов и пробела в MSSQL] (http://stackoverflow.com/questions/22193228/replace-all-characters-of-string-to-asterisks-except-first -characters-and-space) –
Я хотел бы оставить пространство, если возможно – YoUwRonG