Vous allez devoir utiliser REGEXP
pour correspondre au quadrilatère pointillé de l'adresse IP.
SELECT *
FROM yourtable
WHERE
thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
Techniquement, cela correspondra à des valeurs qui ne sont pas des adresses IP valides, comme 999.999.999.999
, mais ce n'est peut-être pas important. Qu'est-ce qu'est important, est de fixer vos données de sorte que les adresses IP soient stockées dans leur propre colonne, séparées de toutes les autres données que vous avez ici. C'est presque toujours une mauvaise idée de mélanger les types de données dans une colonne.
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 |
+------------------------------------------------------------------------------+
Une autre méthode consiste à tenter de convertir l'adresse IP en un entier long via MySQL INET_ATON()
fonction
. Une adresse invalide renverra NULL
.
Cette méthode est susceptible d'être plus efficace que l'expression régulière.
Vous pouvez l'intégrer dans un WHERE
condition comme :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 |
+----------------------------+