pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Jeff Eckermann <jeff_eckermann@yahoo.com>
To: grupos@carvalhaes.net
To: pgsql-sql@postgresql.org
Subject: Re: How to get the max on a char column?
Date: Sat, 20 Nov 2004 09:13:39 -0800 (PST)
Message-ID: <20041120171339.11400.qmail@web20824.mail.yahoo.com> (raw)
In-Reply-To: <419F5A83.1040504@carvalhaes.net>

--- Rodrigo Carvalhaes <grupos@carvalhaes.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@postgresql.org
> 
> 
> ---------------------------(end of
> broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to
> majordomo@postgresql.org
> 



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




view thread (3+ messages)

Message-ID: <20041120171339.11400.qmail@web20824.mail.yahoo.com>
Permalink:  ../20041120171339.11400.qmail@web20824.mail.yahoo.com/
Also on:    postgresql.org/message-id/20041120171339.11400.qmail@web20824.mail.yahoo.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: jeff_eckermann@yahoo.com, grupos@carvalhaes.net
  Subject: Re: How to get the max on a char column?
  In-Reply-To: <20041120171339.11400.qmail@web20824.mail.yahoo.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox