2016-04-03 3 views
0

Ich habe eine Tabelle FT mit einer Spalte namens IPaddress. Die Daten in der Spalte sind alle IP-Adresse in Form von "100.45.4.7". Ich frage mich nur, ob ich alle diese IP-Adressen zwischen 100.45.x.x bis 100.150.x.x wählen könnte. (Ich interessiere mich nicht für die letzten zwei Knoten). Ich habe diesen folgenden Code, der ohne Fehler ausgeführt wurde, aber ich bin mir nicht sicher, ob ich es richtig verstanden habe.SQL WIE ein Bereich von Zahlen

  select * from FT where IPaddress like "100.[45-150]%" 

thx!

+0

[IP-Adresse in MySQL-Datenbank zu speichern] (http://stackoverflow.com/questions/ 6427786/ip-address-storing-in-mysql-datenbank) – lad2025

Antwort

4

Speichern Sie IP-Adressen nicht als Zeichenfolgen. Speichern Sie sie als ganze Zahlen.

Verwenden Sie die MySQL-Funktion INET_ATON(), um eine IP-Adresse in eine Zahl zu konvertieren, und INET_NTOA(), um zurück zu konvertieren. Sobald diese Konvertierung durchgeführt wurde, werden die Nummern, die den IPs entsprechen, fortlaufend sein. Sie können also in Ihrer Abfrage Bedingungen wie IPaddress BETWEEN INET_ATON('100.45.0.0') AND INET_ATON('100.150.255.255') verwenden.

(Ihre Programmiersprache als auch ähnliche Funktionen aufweisen kann, zum Beispiel, PHP ip2long() und long2ip() hat die gleichen Grundsätze wird es funktionieren..)

+0

Können Sie mehr als einmal upvoten? : P – xQbert

+0

Danke !! Ich habe IP-Adressen als INT gespeichert. Dann wurden die gespeicherten Daten "1215" anstelle von "100.45.7.8". Würden Sie das bitte noch einmal überprüfen? vielen Dank! –

+0

@duskwuff tatsächlich alle Daten als 1215 gespeichert, nicht im ursprünglichen Format von 4 Knoten (z. B. "100.45.7.8") –

1

Duskwuff eine sehr gute Antwort gab, den ich empfehlen würde zu verwenden, über meine.

Aber wenn Sie die aktuelle Struktur zu halten, sind gezwungen, können Sie Ihre Anfrage Arbeit wie diese machen:

select * from FT where SUBSTRING_INDEX(IPaddress , '.', 1) = 100 AND SUBSTRING_INDEX(SUBSTRING_INDEX(IPaddress , '.', 2),'.',-1) BETWEEN 45 AND 150 
+0

Danke für die Antwort! Ich benutzte SQL-Anweisung auf Python, und es sagt, wie keine solche Funktion für substring_index, keine Chance, Sie wissen warum? vielen Dank!!!!!! –

+0

Höchstwahrscheinlich aufgrund Ihrer Version von MySQL es nicht. Versuchen Sie es mit 5.1 und höher. –