--this could work if the strings are all uppercase --<-- not true
--you could use nchar & foreign characters and handle everything correctly...it is just a pain to type...
declare @s varchar(20) = 'HELLO123';
--lower case everything
select @s = lower(@s)
--handle numbers with non printable characters --> number to char() --> char() to new number
select @s = replace(replace(replace(replace(replace(replace(@s, '1', char(1)), '2', char(2)), '3', char(3)), char(1), '6'), char(2), '7'), char(3), '8')
--handle letters with case sensitive replacement (using a CS collation)
--(all letters are lowercased)lowercase letter --> new uppercase letter
select replace(replace(replace(replace(@s collate SQL_Latin1_General_CP1_CS_AS, 'h' , 'T'), 'e', 'Q'), 'l', 'Y'), 'o', 'I');
SELECT UPPER(REPLACE(REPLACE(LOWER('HELLO') collate SQL_Latin1_General_CP1_CS_AS, 'h','E'),'e','Q'));
GO
/*
SELECT dbo.shiftchars('0123456789::ABCDEFGHIJKLMNOPQRSTUVWXYZ::abcdefghijklmnopqrstuvwxyz');
just for fun *using a single replace()*
not for millions of rows
suitable for standard latin alphanumeric
extended ascii & non printable chars are not handled correctly.
*/
CREATE FUNCTION dbo.shiftchars(@s VARCHAR(8000))
RETURNS VARCHAR(8000)
WITH SCHEMABINDING, RETURNS NULL ON NULL INPUT
AS
BEGIN
SELECT @s = REPLACE(@s, f collate SQL_Latin1_General_CP1_CS_AS , t)
FROM
(
VALUES
(1, '1', CHAR(1)),
(1, '2', CHAR(2)),
(1, '3', CHAR(3)),
(1, '4', CHAR(4)),
(1, '5', CHAR(5)),
(1, '6', CHAR(6)),
(1, '7', CHAR(7)),
(1, '8', CHAR(8)),
(1, '9', CHAR(9)),
(1, '0', CHAR(254)),
(1, 'A', CHAR(128)),
(1, 'B', CHAR(129)),
(1, 'C', CHAR(130)),
(1, 'D', CHAR(131)),
(1, 'E', CHAR(132)),
(1, 'F', CHAR(133)),
(1, 'G', CHAR(134)),
(1, 'H', CHAR(135)),
(1, 'I', CHAR(136)),
(1, 'J', CHAR(137)),
(1, 'K', CHAR(138)),
(1, 'L', CHAR(139)),
(1, 'M', CHAR(140)),
(1, 'N', CHAR(141)),
(1, 'O', CHAR(142)),
(1, 'P', CHAR(143)),
(1, 'Q', CHAR(144)),
(1, 'R', CHAR(145)),
(1, 'S', CHAR(146)),
(1, 'T', CHAR(147)),
(1, 'U', CHAR(148)),
(1, 'V', CHAR(149)),
(1, 'W', CHAR(150)),
(1, 'X', CHAR(151)),
(1, 'Y', CHAR(152)),
(1, 'Z', CHAR(153)),
(1, 'a', CHAR(154)),
(1, 'b', CHAR(155)),
(1, 'c', CHAR(156)),
(1, 'd', CHAR(157)),
(1, 'e', CHAR(158)),
(1, 'f', CHAR(159)),
(1, 'g', CHAR(160)),
(1, 'h', CHAR(161)),
(1, 'i', CHAR(162)),
(1, 'j', CHAR(163)),
(1, 'k', CHAR(164)),
(1, 'l', CHAR(165)),
(1, 'm', CHAR(166)),
(1, 'n', CHAR(167)),
(1, 'o', CHAR(168)),
(1, 'p', CHAR(169)),
(1, 'q', CHAR(170)),
(1, 'r', CHAR(171)),
(1, 's', CHAR(172)),
(1, 't', CHAR(173)),
(1, 'u', CHAR(174)),
(1, 'v', CHAR(175)),
(1, 'w', CHAR(176)),
(1, 'x', CHAR(177)),
(1, 'y', CHAR(178)),
(1, 'z', CHAR(179)),
--------------------
(2, CHAR(1), '6'),
(2, CHAR(2), '7'),
(2, CHAR(3), '8'),
(2, CHAR(4), '9'),
(2, CHAR(5), '0'),
(2, CHAR(6), '1'),
(2, CHAR(7), '2'),
(2, CHAR(8), '3'),
(2, CHAR(9), '4'),
(2, CHAR(254), '5'),
(2, CHAR(128), 'M'),
(2, CHAR(129), 'N'),
(2, CHAR(130), 'O'),
(2, CHAR(131), 'P'),
(2, CHAR(132), 'Q'),
(2, CHAR(133), 'R'),
(2, CHAR(134), 'S'),
(2, CHAR(135), 'T'),
(2, CHAR(136), 'U'),
(2, CHAR(137), 'V'),
(2, CHAR(138), 'W'),
(2, CHAR(139), 'X'),
(2, CHAR(140), 'Y'),
(2, CHAR(141), 'Z'),
(2, CHAR(142), 'A'),
(2, CHAR(143), 'B'),
(2, CHAR(144), 'C'),
(2, CHAR(145), 'D'),
(2, CHAR(146), 'E'),
(2, CHAR(147), 'F'),
(2, CHAR(148), 'G'),
(2, CHAR(149), 'H'),
(2, CHAR(150), 'I'),
(2, CHAR(151), 'J'),
(2, CHAR(152), 'K'),
(2, CHAR(153), 'L'),
(2, CHAR(154), 'm'),
(2, CHAR(155), 'n'),
(2, CHAR(156), 'o'),
(2, CHAR(157), 'p'),
(2, CHAR(158), 'q'),
(2, CHAR(159), 'r'),
(2, CHAR(160), 's'),
(2, CHAR(161), 't'),
(2, CHAR(162), 'u'),
(2, CHAR(163), 'v'),
(2, CHAR(164), 'w'),
(2, CHAR(165), 'x'),
(2, CHAR(166), 'y'),
(2, CHAR(167), 'z'),
(2, CHAR(168), 'a'),
(2, CHAR(169), 'b'),
(2, CHAR(170), 'c'),
(2, CHAR(171), 'd'),
(2, CHAR(172), 'e'),
(2, CHAR(173), 'f'),
(2, CHAR(174), 'g'),
(2, CHAR(175), 'h'),
(2, CHAR(176), 'i'),
(2, CHAR(177), 'j'),
(2, CHAR(178), 'k'),
(2, CHAR(179), 'l')
) AS v(o, f, t)
ORDER BY o;
RETURN (@s);
END