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;