Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie passe ich eine IP-Adresse in mysql an?

Sie müssen REGEXP verwenden um mit dem gepunkteten Quad-Muster der IP-Adresse übereinzustimmen.

SELECT *
FROM yourtable
WHERE 
  thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'

Technisch entspricht dies Werten, die keine gültigen IP-Adressen sind, wie 999.999.999.999 , aber das ist vielleicht nicht wichtig. Was ist Wichtig ist, dass Ihre Daten so fixiert werden, dass IP-Adressen in einer eigenen Spalte gespeichert werden, getrennt von allen anderen Daten, die Sie hier haben. Es ist fast immer eine schlechte Idee, Datentypen in einer Spalte zu mischen.

mysql> SELECT '9876543210' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';
+---------------------------------------------------------------------------+
| '9876543210' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$' |
+---------------------------------------------------------------------------+
|                                                                         0 |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '987.654.321.0' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$';
+------------------------------------------------------------------------------+
| '987.654.321.0' REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$' |
+------------------------------------------------------------------------------+
|                                                                            1 |
+------------------------------------------------------------------------------+

Eine andere Methode besteht darin, zu versuchen, die IP-Adresse über MySQLs INET_ATON() Funktion . Eine ungültige Adresse gibt NULL zurück .

Diese Methode ist wahrscheinlich effizienter als der reguläre Ausdruck.

Sie können es in ein WHERE einbetten Bedingung wie:WHERE INET_ATON(thecolumn) IS NOT NULL

SELECT INET_ATON('127.0.0.1');
+------------------------+
| INET_ATON('127.0.0.1') |
+------------------------+
|             2130706433 |
+------------------------+

SELECT INET_ATON('notes');
+--------------------+
| INET_ATON('notes') |
+--------------------+
|               NULL |
+--------------------+

SELECT INET_ATON('56.99.9999.44');
+----------------------------+
| INET_ATON('56.99.9999.44') |
+----------------------------+
|                       NULL |
+----------------------------+