mysql - 如何在mysql中匹配一个ip地址?

标签 mysql regex

例如,我有一个列存储这样的数据。

Apple
12.5.126.40
Smite
Abby
127.0.0.1
56.5.4.8
9876543210
Notes

如何只筛选出IP格式数据的行?

我试过 '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0 -9]{1,3}$' 但我不知道为什么它也匹配 9876543210

最佳答案

您将需要使用 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 |
+------------------------------------------------------------------------------+

另一种方法是尝试通过 MySQL 的 INET_ATON() function 将 IP 地址转换为长整型。 .无效地址将返回 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 |
+----------------------------+

关于mysql - 如何在mysql中匹配一个ip地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14699056/

相关文章:

mysql - 无法读取 MySQL 中的 JSON 数据

java - 如何构建正则表达式以获取两个单引号之间的值,如果没有单引号,则在逗号之间提取值

javascript - 正则表达式匹配金额中的小数

php - 如何防止对自己的帖子进行投票?

Java + JDBC : Prepared statement failing

php - 使用来自 SQL 和 PHP 的数据来确定保存文件夹路径

java - 使 Java 正则表达式 '[abc]+' 每个字母匹配一次

python - 需要正则表达式来查找字符串中的\n或\r

java - 将字符串转换为标记

php - 无法使用php连接到远程数据库