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

Поиск
Список
Период
Сортировка
От Rodrigo Carvalhaes
Тема Re: How to get the max on a char column?
Дата
Msg-id 419F68A7.70402@carvalhaes.net
обсуждение исходный текст
Ответ на Re: How to get the max on a char column?  (Jeff Eckermann <jeff_eckermann@yahoo.com>)
Список pgsql-sql
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 
> 
>
>  
>



В списке pgsql-sql по дате отправления:

Предыдущее
От: Jeff Eckermann
Дата:
Сообщение: Re: How to get the max on a char column?
Следующее
От: "Scott Pederick"
Дата:
Сообщение: Re: JOIN not being calculated correctly