Bien qu'il n'ait pas été conçu pour les adresses IP, vous pouvez utiliser PARSENAME
pour diviser une chaîne en sections en divisant la période.
Je vois bien que vous avez des adresses IP avec un deux-points au lieu d'un point, donc vous auriez juste besoin de remplacer tous vos deux-points par un point.
Ainsi, vous pouvez faire:
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)
Vous pouvez jeter cela dans l'Analyseur de requêtes pour confirmer cela fonctionne:
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)
Voir la MSDN link pour plus d'informations.
Voir aussi http://stackoverflow.com/questions/6690101/storing-ip-addresses-in-microsoft-sql-server –