正则表达式中的Mysql字段名称
发布时间:2020-12-14 05:57:31 所属栏目:百科 来源:网络整理
导读:我有下表 Table bots{ ip_address varchar(15),bot_name varchar(32)} 鉴于某些机器人具有静态ips而其他机器人不具有静态ips,该表具有诸如192.168.0和192.168.1.15之类的条目. 现在我必须看看给定的ip是否属于机器人.我正在思考这些问题 SELECT bot_nameFROM
我有下表
Table bots{ ip_address varchar(15),bot_name varchar(32) } 鉴于某些机器人具有静态ips而其他机器人不具有静态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的评论中的极端情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |