Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съпоставим ip адрес в mysql?

Ще трябва да използвате REGEXP за да съвпадне с четириъгълния шаблон с пунктирани IP адреси.

SELECT *
FROM yourtable
WHERE 
  thecolumn REGEXP '^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$'

Технически това ще съответства на стойности, които не са валидни IP адреси, като 999.999.999.999 , но това може да не е важно. Какво е важно е коригирането на вашите данни така, че IP адресите да се съхраняват в собствена колона, отделно от всички други данни, които имате тук. Почти винаги е лоша идея да смесвате типове данни в една колона.

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

Друг метод е да се опитате да конвертирате IP адреса в дълго цяло число чрез INET_ATON() функция . Невалиден адрес ще върне NULL .

Този метод вероятно ще бъде по-ефективен от регулярния израз.

Можете да го вградите в WHERE условие като: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. Използвани са Mysql utf32_unicode_ci и html charset utf-8, но се появява символ �

  2. Проблем с подаването на формуляра... Въведете ключ

  3. Yii2 показва данни, използващи за всеки цикъл

  4. Как да качите няколко изображения в laravel

  5. разделен със запетая низ от избрани стойности в mysql