CREATE FUNCTION replace6plusint(@s1 varchar(100)) RETURNS TABLE AS RETURN WITH firstRun AS ( SELECT replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@s1,'0','^'),'1','^'),'2','^'),'3','^'),'4','^'),'5','^'),'6','^'),'7','^'),'8','^'),'9','^'),'^^^^^^','------') a UNION ALL SELECT replace(a,'-^','--') FROM firstRun WHERE a like '%-^%' ), secondRun AS ( SELECT replace(a,'-','x') b, charindex('^', a) p FROM firstRun WHERE a not like '%-^%' UNION ALL SELECT stuff(b, p, 1, substring(@s1,p,1)), charindex('^', b) FROM secondRun WHERE p <> 0 ) SELECT b result FROM secondRun WHERE p = 0
SELECT name, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(name, '012345','xxxxxx'), '123456','xxxxxx'), '234567','xxxxxx'), '345678','xxxxxx'), '456789','xxxxxx') FROM t1
SELECT t.name, x.New_Name FROM #t1 tCROSS APPLY ( SELECT New_Name = (SELECT Newletter + '' FROM ( SELECT n, Newletter = CASE WHEN d.grouper IS NOT NULL AND COUNT(*) OVER (PARTITION BY d.grouper) > 5 THEN 'x' ELSE letter END FROM ( SELECT n, letter, grouper = ROW_NUMBER() OVER(PARTITION BY t.name ORDER BY ISNUMERIC(letter), n) - N FROM (SELECT TOP(LEN(t.name)) n = ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM sys.columns a, sys.columns b) tally CROSS APPLY (SELECT letter = SUBSTRING(t.name,n,1)) l ) d ) stri ORDER BY n FOR XML PATH('') , TYPE).value('.', 'varchar(max)')) xORDER BY t.name
SELECT t.name, x.New_Name FROM #t1 tCROSS APPLY ( SELECT New_Name = (SELECT Newletter + '' FROM ( SELECT n, Newletter = CASE WHEN ISNUMERIC(letter) = 1 -- d.grouper IS NOT NULL AND COUNT(*) OVER (PARTITION BY d.grouper) > 5 THEN 'x' ELSE letter END FROM ( SELECT t.name, n, letter, grouper = n - ROW_NUMBER() OVER(ORDER BY ISNUMERIC(letter) desc, n) FROM (SELECT TOP(LEN(t.name)) n = ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) FROM sys.columns a, sys.columns b) tally CROSS APPLY (SELECT letter = SUBSTRING(t.name,n,1)) l ) d ) stri ORDER BY n FOR XML PATH('') , TYPE).value('.', 'varchar(max)')) xORDER BY t.name