Anda harus menggunakan REGEXP
untuk mencocokkan alamat IP dengan pola kotak bertitik.
SELECT *
FROM yourtable
WHERE
thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
Secara teknis, ini akan cocok dengan nilai yang bukan alamat IP yang valid, seperti 999.999.999.999
, tapi itu mungkin tidak penting. Apa itu penting, adalah memperbaiki data Anda sedemikian rupa sehingga alamat IP disimpan di kolomnya sendiri terpisah dari data lain apa pun yang Anda miliki di sini. Hampir selalu merupakan ide yang buruk untuk mencampur tipe data dalam satu kolom.
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 |
+------------------------------------------------------------------------------+
Metode lain adalah mencoba mengonversi alamat IP ke bilangan bulat panjang melalui INET_ATON()
fungsi
. Alamat yang tidak valid akan mengembalikan NULL
.
Metode ini kemungkinan akan lebih efisien daripada ekspresi reguler.
Anda dapat menyematkannya di WHERE
kondisi seperti: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 |
+----------------------------+