From: | Anton Nikiforov <anton(at)nikiforov(dot)ru> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: int to inet conversion |
Date: | 2005-12-04 11:09:53 |
Message-ID: | 4392CE81.9060609@nikiforov.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Tom Lane wrote:
> Anton Nikiforov <anton(at)nikiforov(dot)ru> writes:
>
>>is there any function that can translate INT to INET type?
>
>
> Nothing built-in, and given the fact that "inet" no longer means "IPv4",
> it's unlikely we'd add one in the future. But there's nothing stopping
> you from adding one of your own. For example
>
> regression=# create or replace function int2inet(int) returns inet as $$
> regression$# declare oct1 int;
> regression$# oct2 int;
> regression$# oct3 int;
> regression$# oct4 int;
> regression$# begin
> regression$# oct1 := ((($1 >> 24) % 256) + 256) % 256;
> regression$# oct2 := ((($1 >> 16) % 256) + 256) % 256;
> regression$# oct3 := ((($1 >> 8) % 256) + 256) % 256;
> regression$# oct4 := ((($1 ) % 256) + 256) % 256;
> regression$# return oct1 || '.' || oct2 || '.' || oct3 || '.' || oct4;
> regression$# end$$ language plpgsql strict immutable;
> CREATE FUNCTION
> regression=# select int2inet(-1062726656);
> int2inet
> --------------
> 192.168.20.0
> (1 row)
>
> There's probably a better way to do the shifting-and-masking, but that
> was the first thing that came to mind. (Actually, if you are planning
> to push a whole lot of data through this, it might be worth your time
> to write something in C. But for a one-shot data conversion task this
> is probably plenty good enough.)
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
>
Sorry for my stupidity but, maybe there is a function that converts mask
stored in int format to a numer of bits? ;)
Your function easyly convert this mask to dot decimal notation, but how
to count the number of 1 in it?
Best regards,
Anton
From | Date | Subject | |
---|---|---|---|
Next Message | Martijn van Oosterhout | 2005-12-04 11:54:15 | Re: int to inet conversion |
Previous Message | Martijn van Oosterhout | 2005-12-04 10:07:21 | Re: function in index expression and unnecessary function calls in select |