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;