Re: How to get the max on a char column?

From: Jeff Eckermann <jeff_eckermann(at)yahoo(dot)com>
To: grupos(at)carvalhaes(dot)net, pgsql-sql(at)postgresql(dot)org
Subject: Re: How to get the max on a char column?
Date: 2004-11-20 17:13:39
Message-ID: 20041120171339.11400.qmail@web20824.mail.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

--- Rodrigo Carvalhaes <grupos(at)carvalhaes(dot)net> wrote:

> Hi !
>
> I am quite confused of the results on a SELECT
> max...
>
> My environment:
> Conectiva Linux 10, PostgreSQL 7.4.6 (compiled from
> the sources)
>
> My problem is the "select max(id) FROM test" the
> result is 20 but the
> right is 1020. Is this a BUG or I am crazy ??

For a char() column, '20' is the maximum of the values
that you have inserted, because the comparison is
text-based, not numeric. If you want numeric sorting,
you will need to cast the value, like:

select max(cast(id as integer)) from test;

I'm not sure offhand whether in fact a direct cast
from char() to integer is available; you may need to
cast to "text" first.

But if you expect to be able to sort numerically, why
are you not using a numeric datatype?

>
> Cheers,
>
> Rodrigo Carvalhaes
>
> The SQL...
>
> teste=# CREATE TABLE test ( id char(15), name
> char(80) );
> CREATE TABLE
> teste=# \d test
> Table "public.test"
> Column | Type | Modifiers
> --------+---------------+-----------
> id | character(15) |
> name | character(80) |
>
> teste=# INSERT INTO test VALUES ( '10', 'luidgi');
> INSERT 15303727 1
> teste=# INSERT INTO test VALUES ( '20', 'luis');
> INSERT 15303728 1
> teste=# INSERT INTO test VALUES ( '1010', 'ruan');
> INSERT 15303729 1
> teste=# INSERT INTO test VALUES ( '1020', 'lion');
> INSERT 15303730 1
> teste=# SELECT * FROM test;
> id |
> name
>
-----------------+----------------------------------------------------------------------------------
>
>
> 10 | luidgi
> 20 | luis
> 1010 | ruan
> 1020 | lion
> (4 rows)
>
> teste=# SELECT max(id) FROM test;
> max
> -----
> 20
> (1 row)
>
> teste=# select max(id) FROM test;
> max
> -----
> 20
> (1 row)
>
>
>
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to
> majordomo(at)postgresql(dot)org
>
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to
> majordomo(at)postgresql(dot)org
>


__________________________________
Do you Yahoo!?
Meet the all-new My Yahoo! - Try it today!
http://my.yahoo.com

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Scott Pederick 2004-11-20 21:37:54 Re: JOIN not being calculated correctly
Previous Message Tom Lane 2004-11-20 16:36:54 Re: Move table between schemas