2009-07-07 8 views
0

J'ai une table MS SQLServer 2005 qui inclut une colonne ipaddress, et je voudrais compter les entrées par sous-réseau.requête ipaddresses par sous-réseau

Malheureusement, la colonne ipaddress est un varchar avec des données d'échantillons tels que: 192.168.10.20 10.1.2.3

Je pense que la meilleure approche serait de convertir le ipaddress en entier, puis je pourrais appliquer la appropriée bitmask.

Y a-t-il des suggestions sur la façon d'obtenir une chaîne de 4 octets dans un entier?

Répondre

0

vous pouvez également le faire en utilisant la fonction PARSENAME comme il est here show.

1

Pour convertir une notation pointillée de 4 octets en BIGINT, nous pouvons procéder comme suit.

DECLARE @IP CHAR (15) SET @ IP = '192.168.123.123'

select (CONVERT (BIGINT, ParseName (@ IP, 1)) + CONVERT (BIGINT, ParseName (@ IP, 2)) * 256 + CONVERT (BIGINT, ParseName (@ IP, 3)) * 65536 + CONVERT (BIGINT, ParseName (@ IP, 4)) * 16777216)

à partir de là, il est une chose assez simple et cela avec 4294967040 (255.255.255.0) pour obtenir/24 sous-réseau

Merci à Less Than Dot pour le code.

Questions connexes