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
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 |