比如我要插入一段IP(219.168.150.200),但是我数据库中有一条记录的IP是219.168.150.100-219.168.150.255。那么这条IP就包含在了数据库中的IP段范围中,这个怎么判断?
insert ignore的方式
数据库ip段开始和结束ip地址要转为数字来存储(两个字段),不能是字符串的,然后插入ip的时候将ip转为数字判断是否有between的记录,有就不插入
通过截取的方式来判定,插入IP(219.168.150.200), substring(ip,0,11)跟IP段的网段一致,继续判断select count(1) from table1 where
substring(ip1,12)>=substring(ip2,12,3) and substring(ip1,12)<=substring(ip2,16,3) ,如果count(1)大于0就是已存在
INSERT INTO tablename(col)
SELECT '219.168.150.200' FROM DUAL WHERE NOT EXISTS
(SELECT * FROM tablename WHERE INET_ATON('219.168.150.200') BETWEEN INET_ATON(SUBSTRING_INDEX(col,'-',1)) AND INET_ATON(SUBSTRING_INDEX(col,'-',-1)));
这条sql必须行,除非我把题目理解错了。
题主看看这个可能会明白点https://bbs.csdn.net/topics/70511175
可以通过截取的方式来判定
我建议你仍然以 字符串 存储 ip, 自己写个函数实现这样两个功能:1. 去出最后一个 '.' 后面的子串。2.将这个子串转换成数字,然后与你指定的范围比较
这样一个判断其实也没有什么消耗, 而且实现起来很简单。