在做项目时,并不知道这两个函数,所以对IP的处理都是自己写的函数,但是使用时效率却是十分的差,下面函数是把IP转化成整数: 复制代码 代码如下: CREATE FUNCTION `transIPtoInt`(ip char(31)) RETURNS char(31) begin DECLARE value1 CHAR(10); DECLARE value2 CHAR(10); DECLARE value3 CHAR(10); DECLARE value4 CHAR(10); set value1=SUBSTRING_INDEX(ip, ".", 1); set value2=SUBSTRING_INDEX(ip, ".", 2); set value2=SUBSTRING_INDEX(value2, ".", -1); set value3=SUBSTRING_INDEX(ip, ".", -2); set value3=SUBSTRING_INDEX(value3, ".", 1); set value4=SUBSTRING_INDEX(ip, ".", -1); set value1=value1<<24; set value2=value2<<16; set value3=value3<<8; return value1+value2+value3+value4; end;
为了IP地址比较的方便,我还写了一个把IP地址中每一段都补足三位的函数,如下: 复制代码 代码如下: CREATE FUNCTION `fillIp`(ip char(31)) RETURNS char(31) begin DECLARE value1 CHAR(31); DECLARE value2 CHAR(10); DECLARE value3 CHAR(10); DECLARE value4 CHAR(10); set value1=SUBSTRING_INDEX(ip, ".", 1); set value2=SUBSTRING_INDEX(ip, ".", 2); set value2=SUBSTRING_INDEX(value2, ".", -1); set value3=SUBSTRING_INDEX(ip, ".", -2); set value3=SUBSTRING_INDEX(value3, ".", 1); set value4=SUBSTRING_INDEX(ip, ".", -1); set value1=LPAD(value1,3,"0"); set value2=LPAD(value2,3,"0"); set value3=LPAD(value3,3,"0"); set value4=LPAD(value4,3,"0"); return CONCAT(value1,".",value2,".",value3,".",value4); end;