I need my IP list sorted. Problem is that i want them sorted after the value in the first part, then second part and so on.
MYTABLE
DATA
20.1.2.1
100.1.1.1
20.1
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.