Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como combinar um endereço IP no mysql?


Você precisará usar REGEXP para corresponder ao padrão quádruplo pontilhado do endereço IP.
SELECT *
FROM yourtable
WHERE 
  thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'

Tecnicamente, isso corresponderá a valores que não são endereços IP válidos, como 999.999.999.999 , mas isso pode não ser importante. O que é importante, é corrigir seus dados de forma que os endereços IP sejam armazenados em sua própria coluna separada de quaisquer outros dados que você tenha aqui. É quase sempre uma má ideia misturar tipos de dados em uma coluna.
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 |
+------------------------------------------------------------------------------+

Outro método é tentar converter o endereço IP para um inteiro longo por meio do INET_ATON() função . Um endereço inválido retornará NULL .

Esse método provavelmente será mais eficiente que a expressão regular.

Você pode incorporá-lo em um WHERE condição como: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 |
+----------------------------+