sql - 正则表达式中的 Mysql 字段名称

标签 sql mysql regex

我有下表

Table bots{
    ip_address varchar(15),
    bot_name varchar(32)
}

鉴于一些机器人有静态 ips 而另一些则没有,该表包含诸如 192.168.0 和 192.168.1.15 之类的条目

现在我必须查看给定的 ip 是否属于机器人。我在想一些类似的事情

SELECT bot_name
FROM bots
WHERE __input_ip__  REGEXP '^ip_address'

但这行不通,原因很明显,它正在寻找以 ip_address 开头的字符串。

所以我的问题是,如何在 sql 正则表达式中包含字段名称?

最佳答案

您可能需要考虑将 IP 地址存储为 INT UNSIGNED。还要存储网络掩码,以便您可以区分静态地址和子网。

INSERT INTO bots (ipaddress, netmask, bot_name) 
VALUES (INET_ATOI('192.168.1.0'), INET_ATOI('255.255.255.0'), 'Wall-E');

然后您可以查询输入的 IP 地址是否匹配:

SELECT bot_name
FROM bots
WHERE __input_ip__ & netmask = ipaddress & netmask;

对 IP 地址使用整数而不是 CHAR(15) 是一种常见的优化。即使存储 IP 地址和网络掩码的 8 个字节也只是 CHAR(15) 存储空间的一半多一点。而且按位运算可能比正则表达式匹配快很多,并且更容易避免@Gumbo 评论中的极端情况。

关于sql - 正则表达式中的 Mysql 字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460954/

相关文章:

mysql - SQL- JOIN 来自两个表的两列

java - servlet 发生 mySql 列未找到错误

sql - MySQL View - 何时使用和何时不使用

python - 用于在 Python 中删除字符串中所有 URL 的正则表达式

javascript - 获取除破折号之外的所有内容 - javascript 中的正则表达式

mysql - INSERT 多行 INTO 一张表,每条记录的列具有不同的引用值

javascript - Ajax、PHP、SQL 和 JavaScript

php - 使用 PHP 更新表格会覆盖 CSS 格式

mysql - 另一张用于仓库或任何其他标准的 table

regex - 如何在 VBA 宏中使用正则表达式解析 Excel 单元格字符串