1. 程式人生 > >postgresql使用正則匹配IP地址

postgresql使用正則匹配IP地址

在查詢某表的資料時,對錶中的ip進行正則匹配:

select '192.168.14.29' ~ '^((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))(?:\\.)){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))$'

將資料庫表中,ip不規範的資料過濾:

select * from tableName where ipaddress ~ '^((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))(?:\\.)){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))$' 

postgresql中,使用函式,將ip地址轉換成整數,以此來判斷某個ip是否在某個ip段中:

CREATE FUNCTION ip2int(text) RETURNS bigint AS $$ 
SELECT split_part($1,'.',1)::bigint*16777216 + split_part($1,'.',2)::bigint*65536 +
 split_part($1,'.',3)::bigint*256 + split_part($1,'.',4)::bigint;
$$ LANGUAGE SQL  IMMUTABLE RETURNS NULL ON NULL INPUT;

SELECT ip2int('200.233.1.2');

select ip2int('192.168.3.78') > ip2int('192.168.1.0')