Re: inet , min/max

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: Raw Message | Whole Thread | 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.

In response to

Responses

Browse pgsql-tr-genel by date

  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