gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:04:01 25 4
gpt4 key购买 nike

我有下表

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com