Bạn sẽ cần sử dụng REGEXP
để khớp với mẫu tứ giác chấm chấm địa chỉ IP.
SELECT *
FROM yourtable
WHERE
thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'
Về mặt kỹ thuật, điều này sẽ khớp với các giá trị không phải là địa chỉ IP hợp lệ, như 999.999.999.999
, nhưng điều đó có thể không quan trọng. là gì quan trọng là sửa dữ liệu của bạn sao cho địa chỉ IP được lưu trữ trong cột riêng của chúng, tách biệt với bất kỳ dữ liệu nào khác mà bạn có ở đây. Hầu như luôn luôn là một ý tưởng tồi khi kết hợp các loại dữ liệu trong một cột.
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 |
+------------------------------------------------------------------------------+
Một phương pháp khác là cố gắng chuyển đổi địa chỉ IP thành một số nguyên dài thông qua INET_ATON()
chức năng
. Địa chỉ không hợp lệ sẽ trả về NULL
.
Phương thức này có thể hiệu quả hơn so với biểu thức chính quy.
Bạn có thể nhúng nó vào WHERE
điều kiện như: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 |
+----------------------------+