Listing 3: Sorting IP Addresses by Using Nested Derived Tables SELECT ip FROM (SELECT *, CHARINDEX('.', ip, p2+1) AS p3 FROM (SELECT *, CHARINDEX('.', ip, p1+1) AS p2 FROM (SELECT ip, CHARINDEX('.', ip) AS p1 FROM IPs) AS D1) AS D2) AS D3 ORDER BY CAST(SUBSTRING(ip, 1, p1 - 1 ) AS tinyint), CAST(SUBSTRING(ip, p1 + 1, p2 - p1 - 1) AS tinyint), CAST(SUBSTRING(ip, p2 + 1, p3 - p2 - 1) AS tinyint), CAST(SUBSTRING(ip, p3 + 1, 3 ) AS tinyint);