Re: LEAST and GREATEST functions?
От
Joe Conway
Тема
Re: LEAST and GREATEST functions?
Дата
Msg-id
3F01ED9F.3060704@joeconway.com
Ответ на
Re: LEAST and GREATEST functions? (Greg Stark)
Список
Дерево обсуждения
LEAST and GREATEST functions? Stefan Bill <sjb26@yahoo.com>
Re: LEAST and GREATEST functions? Josh Berkus <josh@agliodbs.com>
Re: LEAST and GREATEST functions? Stefan Bill <sjb26@yahoo.com>
Re: LEAST and GREATEST functions? Greg Stark <gsstark@mit.edu>
Re: LEAST and GREATEST functions? Bruno Wolff III <bruno@wolff.to>
Re: LEAST and GREATEST functions? Joe Conway <mail@joeconway.com>
Re: LEAST and GREATEST functions? Josh Berkus <josh@agliodbs.com>
Re: LEAST and GREATEST functions? Joe Conway <mail@joeconway.com>
Re: LEAST and GREATEST functions? Joe Conway <mail@joeconway.com>
Re: LEAST and GREATEST functions? Ang Chin Han <angch@bytecraft.com.my>
Re: LEAST and GREATEST functions? Tom Lane <tgl@sss.pgh.pa.us>
Re: LEAST and GREATEST functions? Ang Chin Han <angch@bytecraft.com.my>
Re: LEAST and GREATEST functions? Tom Lane <tgl@sss.pgh.pa.us>
Re: LEAST and GREATEST functions? Ang Chin Han <angch@bytecraft.com.my>
Greg Stark wrote:
> SELECT greatest(a,b) FROM bar
>
> would return one tuple for every record in the table with a single value
> representing the greater of bar.a and bar.b.
>
> You could define your own functions to do this but it would be tiresome to
> define one for every datatype.
>
In 7.4devel (just starting beta) you can do this:
create or replace function greatest(anyelement, anyelement) returns
anyelement as 'select case when $1 > $2 then $1 else $2 end' language 'sql';
regression=# select greatest(1, 2); greatest
---------- 2
(1 row)
regression=# select greatest('b'::text, 'a'); greatest
---------- b
(1 row)
regression=# select greatest(now(), 'yesterday'); greatest
------------------------------- 2003-07-01 13:21:56.506106-07
(1 row)
The cast to text is needed because 'a' and 'b' are really typed as
unknown, and with polymorphic functions, you need a well defined data type.
So if you had a table:
create table g(f1 text, f2 text);
insert into g values ('a','b');
insert into g values ('c','b');
regression=# select greatest(f1, f2) from g; greatest
---------- b c
(2 rows)
Doesn't help for 7.3.x, but at least you know help is on the way ;-)
Of course, you could always just use the case statement.
Joe
В списке pgsql-sql по дате отправления