sql >> Database >  >> RDS >> Mysql

Hoe een ip-adres matchen in mysql?

Je zult REGEXP . moeten gebruiken om overeen te komen met het gestippelde quad-patroon van het IP-adres.

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

Technisch gezien komt dit overeen met waarden die geen geldige IP-adressen zijn, zoals 999.999.999.999 , maar dat is misschien niet belangrijk. Wat is belangrijk is, is uw gegevens zodanig te corrigeren dat IP-adressen in hun eigen kolom worden opgeslagen, gescheiden van alle andere gegevens die u hier heeft. Het is bijna altijd een slecht idee om gegevenstypen in één kolom te combineren.

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

Een andere methode is om te proberen het IP-adres om te zetten naar een lang geheel getal via MySQL's INET_ATON() functie . Een ongeldig adres retourneert NULL .

Deze methode is waarschijnlijk efficiënter dan de reguliere expressie.

Je kunt het insluiten in een WHERE voorwaarde zoals: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 |
+----------------------------+


  1. Intersectie van MySQL-geometrie produceert niet-kruisende resultaten

  2. Hulp nodig bij het converteren van datum in indeling 20120130 naar datumgegevenstype oracle sql

  3. hoe flashbacken als we dataguard hebben

  4. Python/postgres/psycopg2:ID van zojuist ingevoegde rij ophalen