Mysql
 sql >> Database >  >> RDS >> Mysql

Come abbinare un indirizzo IP in MySQL?

Dovrai usare REGEXP in modo che corrisponda allo schema a quattro punti dell'indirizzo IP.

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

Tecnicamente, questo corrisponderà a valori che non sono indirizzi IP validi, come 999.999.999.999 , ma potrebbe non essere importante. Che cosa è importante, è correggere i tuoi dati in modo tale che gli indirizzi IP siano archiviati nella propria colonna separata da qualsiasi altro dato che hai qui. È quasi sempre una cattiva idea combinare i tipi di dati in una colonna.

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 |
+------------------------------------------------------------------------------+

Un altro metodo consiste nel tentare di convertire l'indirizzo IP in un intero lungo tramite INET_ATON() funzione . Un indirizzo non valido restituirà NULL .

È probabile che questo metodo sia più efficiente dell'espressione regolare.

Puoi incorporarlo in un WHERE condizione come: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 |
+----------------------------+