-- aurelien_verla_tsqlchallenge_14_1.sql DECLARE @t TABLE (Data VARCHAR(40) ) INSERT @t (Data) SELECT '9992EDC6-D117-4DEE-B410-4E5FAE46AE97' INSERT @t (Data) SELECT '0BFC936B-BD9A-4C6A-AFB2-CF3F1752F8B1' INSERT @t (Data) SELECT '4A73E7EB-7777-4A04-9258-F1E75097977C' INSERT @t (Data) SELECT '5AAF477C-274D-400D-9067-035968F33B19' INSERT @t (Data) SELECT '725DA718-30D0-44A9-B36A-89F27CDFEEDE' INSERT @t (Data) SELECT '8083ED5A-D3B9-4694-BB04-F0B09C588888' SELECT T2.[Data] AS 'Data', SUBSTRING(T2.[Data], T1.[number], 1) AS 'Char', T1.[number] AS 'Pos', CASE WHEN PATINDEX( '%[^' + SUBSTRING(T2.[Data], T1.[number], 1) + ']%', SUBSTRING(T2.[Data], T1.[number] + 1, LEN(T2.[Data])) ) = 0 THEN LEN(T2.[Data]) - T1.[number] + 1 ELSE PATINDEX( '%[^' + SUBSTRING(T2.[Data], T1.[number], 1) + ']%', SUBSTRING(T2.[Data], T1.[number] + 1, LEN(T2.[Data])) ) END AS 'Len' FROM [master].[dbo].[spt_values] AS T1, @t AS T2 WHERE T1.[type] = 'P' AND T1.[number] BETWEEN 1 AND LEN(T2.[Data]) AND SUBSTRING(T2.[Data], T1.[number], 1) <> SUBSTRING(T2.[Data], T1.[number] - 1, 1) AND SUBSTRING(T2.[Data], T1.[number], 1) = SUBSTRING(T2.[Data], T1.[number] + 1, 1) ORDER BY MAX( CASE WHEN PATINDEX( '%[^' + SUBSTRING(T2.[Data], T1.[number], 1) + ']%', SUBSTRING(T2.[Data], T1.[number] + 1, LEN(T2.[Data])) ) = 0 THEN LEN(T2.[Data]) + 1 - T1.[number] ELSE PATINDEX( '%[^' + SUBSTRING(T2.[Data], T1.[number], 1) + ']%', SUBSTRING(T2.[Data], T1.[number] + 1, LEN(T2.[Data])) ) END ) OVER (PARTITION BY T2.[Data]) DESC, COUNT(T2.[Data]) OVER (PARTITION BY T2.[Data]) DESC, T2.[Data], T1.[number]
Did you understand how this solution work? If you find it difficult to understand, you can Request an Explanation or you can Write an explanation to help others better understand this.