From: | Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr> |
---|---|
To: | Timu EREN <selamtux(at)gmail(dot)com> |
Cc: | pgsql-tr-genel(at)postgresql(dot)org |
Subject: | Re: inet , min/max |
Date: | 2006-08-10 07:09:30 |
Message-ID: | 20060810070930.GC1407@alamut.tdm.local |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-tr-genel |
On Aug 10 09:45, Volkan YAZICI wrote:
> On Aug 11 01:14, Timu EREN wrote:
> > Elimde aşağıdaki gibi bir tablo var ve ben bu tablodaki ip_address alanında
> > min/max değerlerini alabilmek istiyorum ancak aşağıdaki gibi bir sonuç
> > geliyor, inet alanındaki veriyi netmask bit'i ile birlikte tuttuysamda
> > istediğim şeyi elde edemedim.
> >
> > Create table list
> > (
> > id bigserial not null,
> > ip_address inet not null,
> > name varchar(230) not null
> > );
> >
> > select min(host(ip_address)),max(host(ip_address)) from list;
> >
> > 192.168.4.1 | 192.168.4.99
>
> Bildiğim kadarı ile, PostgreSQL inet veri tipi tarafından sunulan B-Tree
> karşılaştırma operatörlerini kullanarak çalışan bir max() aggregator'ı ne
> yazık ki yok. Biraz didinerek bunu kendinizi oluşturabileceğiniz gibi,
> ...
Biraz uğraştım da, aslında göründüğünden daha kolaymış
BEGIN;
CREATE FUNCTION max(inet, inet) RETURNS inet AS
'SELECT CASE WHEN $1 > $2 THEN $1 ELSE $2 END'
LANGUAGE SQL IMMUTABLE STRICT;
CREATE FUNCTION min(inet, inet) RETURNS inet AS
'SELECT CASE WHEN $1 < $2 THEN $1 ELSE $2 END'
LANGUAGE SQL IMMUTABLE STRICT;
CREATE AGGREGATE max (
basetype = inet,
sfunc = max,
stype = inet
);
CREATE AGGREGATE min (
basetype = inet,
sfunc = min,
stype = inet
);
Artık inet veri tipi üzerinde min(), max() aggregator'larını
kullanabilirsiniz.
İyi çalışmalar.
From | Date | Subject | |
---|---|---|---|
Next Message | Volkan YAZICI | 2006-08-10 09:06:29 | Re: inet , min/max |
Previous Message | Volkan YAZICI | 2006-08-10 06:45:36 | Re: inet , min/max |