Хотя он не предназначен для IP-адресов, вы можете использовать PARSENAME
, чтобы разделить строку на разделы, разделив точку.
Я вижу, что у вас есть IP-адреса с двоеточием вместо точки, поэтому вам просто нужно заменить все двоеточия на точку.
Таким образом, вы можете сделать:
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)
Вы можете добавить это в Query Analyzer, чтобы подтвердить, что оно работает:
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)
См. Ссылку MSDN для получения дополнительной информации.