sql >> Databáze >  >> RDS >> Mysql

Jak porovnat ip adresu v mysql?

Budete muset použít REGEXP aby se shodovala se čtvercovým vzorem IP adresy.

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

Technicky to bude odpovídat hodnotám, které nejsou platnými IP adresami, jako je 999.999.999.999 , ale to nemusí být důležité. Co je důležité je opravit vaše data tak, aby IP adresy byly uloženy v jejich vlastním sloupci odděleně od jakýchkoli jiných dat, která zde máte. Míchat datové typy v jednom sloupci je téměř vždy špatný nápad.

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

Další metodou je pokus o převod IP adresy na dlouhé celé číslo pomocí INET_ATON() funkce . Neplatná adresa vrátí NULL .

Tato metoda bude pravděpodobně efektivnější než regulární výraz.

Můžete jej vložit do WHERE stav jako: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. Aktualizace databáze MySql pomocí PHP pomocí javascriptové funkce onClick

  2. Příklad Oracle UTL_HTTP Post Multipart/Form-Data (JSON &ZIP).

  3. Hibernate Relationship Mapping/Urychlení dávkových vložek

  4. Chyba neplatného identifikátoru pro v_MONTH v dynamickém dotazu