DECLARE @t TABLE (Data CHAR(36) NOT NULL PRIMARY KEY) 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' ;WITH x1 (n) AS ( SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ), x2 (n) AS ( SELECT (a.n * 6) + b.n + 1 FROM x1 a, x1 b ) SELECT t.Data, p.Char, p.Pos, p.Len FROM @t AS t CROSS APPLY ( SELECT z.*, MAX(z.Len) OVER () AS MaxLen FROM ( SELECT y.Char, MIN(y.Number) AS Pos, COUNT(*) AS Len FROM ( SELECT x.*, ( x.Number - DENSE_RANK() OVER ( PARTITION BY x.Char ORDER BY x.Number ) ) * ASCII(x.Char) AS CharGroup FROM ( SELECT SUBSTRING(t.Data, w.Number, 1) AS Char, w.Number FROM ( SELECT x2.n AS Number FROM x2 ) AS w ) AS x ) AS y GROUP BY y.Char, y.CharGroup HAVING COUNT(*) > 1 ) AS z ) AS p ORDER BY MaxLen DESC, Pos