add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
SELECT *
FROM (VALUES
('banana'),
('selin'),
('vegetable')
) words(word)
CROSS
APPLY (SELECT CASE
WHEN ln BETWEEN 4 AND 5
THEN LEFT(word, 1) + REPLICATE('*', ln-2) + RIGHT(word, 1)
WHEN ln >= 6
THEN LEFT(word, 2) + REPLICATE('*', ln-4) + RIGHT(word, 2)
ELSE word
END as result
FROM (VALUES (LEN(words.word))) x(ln)
) calc
word result
banana ba**na
selin s***n
vegetable ve*****le
CREATE FUNCTION dbo.fnMaskWord(@str NVARCHAR(MAX))
RETURNS TABLE
AS RETURN (
SELECT CASE
WHEN ln BETWEEN 4 AND 5
THEN LEFT(@str, 1) + REPLICATE('*', ln-2) + RIGHT(@str, 1)
WHEN ln >= 6
THEN LEFT(@str, 2) + REPLICATE('*', ln-4) + RIGHT(@str, 2)
ELSE @str
END as result
FROM (VALUES (LEN(@str))) x(ln)
)
SELECT *
FROM (VALUES
('banana'),
('selin'),
('vegetable')
) words(word)
CROSS
APPLY fnMaskWord(word)

word result
banana ba**na
selin s***n
vegetable ve*****le