Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để khớp một địa chỉ ip trong mysql?

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm Mysql Theo khoảng thời gian 24 giờ

  2. Làm cách nào để bảo vệ chống lại các cuộc tấn công SQL injection bằng cách sử dụng DBI của Perl?

  3. Làm cách nào để thêm tổng số làm hàng cuối cùng trong sql của tôi?

  4. Các phương pháp hay nhất về xóa mềm (PHP / MySQL)

  5. Lọc các hàng riêng biệt trong SQL