pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Rodrigo Carvalhaes <grupos@carvalhaes.net>
To: Jeff Eckermann <jeff_eckermann@yahoo.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: How to get the max on a char column?
Date: Sat, 20 Nov 2004 15:54:15 +0000
Message-ID: <419F68A7.70402@carvalhaes.net> (raw)
In-Reply-To: <20041120171339.11400.qmail@web20824.mail.yahoo.com>
References: <20041120171339.11400.qmail@web20824.mail.yahoo.com>

Dear Jeff,

Thank you for your help.

I tried :  select max((id::text)::integer) from test; 

and works perfectly!

Greetings from Brazil!

Rodrigo Carvalhaes

Jeff Eckermann wrote:

>--- 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)  latest in thread

Message-ID: <419F68A7.70402@carvalhaes.net>
Permalink:  ../419F68A7.70402@carvalhaes.net/
Also on:    postgresql.org/message-id/419F68A7.70402@carvalhaes.net

 · 

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: grupos@carvalhaes.net, jeff_eckermann@yahoo.com
  Subject: Re: How to get the max on a char column?
  In-Reply-To: <419F68A7.70402@carvalhaes.net>

* 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