inet -> 32-bit integer - как?

Гравис
Дата: 04.11.2004 08:29:33
Есть ли возможность средствапи PL/pgSQL преобразовать inet тип данных (1.2.3.4/24) к 32-битному integer эквиваленту? Например 255.255.255.255 > 4294967295. Ну и наоборот :) Если нет, то как это можно сделать?
Black Jaguar
Дата: 04.11.2004 14:28:16
Присоединяюсь! Уж больно надо...
wbear
Дата: 04.11.2004 14:33:55
INT8->VARCHAR
VARCHAR->INT8
незабудте inet к варчару приводить!!!

CREATE OR REPLACE FUNCTION billstat.int82ip(int8)
  RETURNS text AS
'
select  ($1&(255::int4<<24)>>24)::text || \'.\' ||
	($1&(255::int4<<16)>>16)::text || \'.\' ||
	($1&(255::int4<<8)>>8)::text || \'.\' ||
	($1&255)::text
'
  LANGUAGE 'sql' IMMUTABLE;

CREATE OR REPLACE FUNCTION billstat.ip2int8(varchar)
  RETURNS int8 AS
'
select  (split_part($1,\'.\',1)::int8<<24)::int8 +(split_part($1,\'.\',2)::int8<<16)::int8 +(split_part($1,\'.\',3)::int8<<8)::int8 + split_part($1,\'.\',4)::int8;
'
  LANGUAGE 'sql' IMMUTABLE;
MaximZ
Дата: 04.11.2004 14:36:23
функции такой нет. Придется самому написать.
MaximZ
Дата: 04.11.2004 14:41:01
мдаа, сильно, я и не знал что такое бывает. :)
Особенно первая, впечатляет. :)
wbear
Дата: 04.11.2004 19:32:43
это все из за того что PG незнает что такое 0xFF000000 и из за того что у посгреса int4 это не совсем int, а signed int, так бы было красивее и понятнее.
Vlad Rosikhin
Дата: 09.02.2005 11:56:28
спасибки всем :) я тоже этим приёмом воспользовался.