有没有办法选择第一个和最后两个字符并用*替换所有其他字符,如下所示?
WA***RT
EX*** ***IL
CH***ON
BE******* *****AY
AP*LE
提前致谢!
答案 0 :(得分:2)
跳过空格:
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;
的 LiveDemo
强>
如果使用的版本低于SQL Server 2012
连接字符串+
。
答案 1 :(得分:0)
您可以使用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
)
答案 2 :(得分:0)
select left(col, 2) + REPLICATE('*',len(col)-4) + right(col,2) from table;