Although it wasn't designed for IP addresses, you can use PARSENAME
to divide a string into sections by splitting on the period.
I see though that you have IP addresses with a colon instead of a period, so you would just need to replace all your colons with a period.
Thus, you could do:
SELECT *
FROM MyTable
ORDER BY CAST(PARSENAME(REPLACE(Data, ':', '.'), 4) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 3) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 2) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 1) as int)
You can throw this in Query Analyzer to confirm it works:
SELECT *
FROM (
SELECT '20:1:2:1' AS Data UNION
SELECT '100:1:1:1' UNION
SELECT '20:1:10:1' UNION
SELECT '80:8:8:8'
) X
ORDER BY CAST(PARSENAME(REPLACE(Data, ':', '.'), 4) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 3) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 2) as int),
CAST(PARSENAME(REPLACE(Data, ':', '.'), 1) as int)
See the MSDN link for more information.