Re: Wrong "ORDER BY" on a numeric value result

From: hubert depesz lubaczewski <depesz(at)depesz(dot)com>
To: Stefan Wild <wilds81(at)yahoo(dot)de>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Wrong "ORDER BY" on a numeric value result
Date: 2010-08-15 03:53:48
Message-ID: 20100815035348.GA10317@depesz.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sat, Aug 14, 2010 at 09:46:37PM +0000, Stefan Wild wrote:
> Hello guys,
>
> I have following sorting problem and need your help. When executing this SELECT statement:
>
> "SELECT d.id, d.name,
> d.description, ts.name, d.opentimestamp,
> d.initialvalue, d.plmoney, d.performance,
> d.performancepa, d.currentopenmoney, d.investedmoney,
> d.investedpercent, d.cashmoney, d.realizedwinmoney,
> d.realizedlossmoney, d.currenttotalvalue, d.depotriskpercent,
> d.taxesratepercent, d.taxallowance, d.paidtaxes,
> d.paidfees FROM c_depots d INNER JOIN c_tradingsystems ts
> ON d.tradingsystem_id=ts.id INNER JOIN cx_users_depots cx ON
> cx.id_depots=d.id INNER JOIN c_users u ON cx.id_users=u.id WHERE
> u.login='xxxx' ORDER BY UPPER(CAST (d.currenttotalvalue AS numeric) )
> DESC"
> The column currenttotalvalue has a numeric type with a length of 14 and 2 digits for percision. The initial SELECT didn't used the CAST, but the result was also wrong.

column is numeric, but upper() works on text, and returns text, so your
numeric column got casted to text by using upper (which is pointless
anyway - there is no "upper" version of digits).
remove upper() and you'll be fine.

depesz

--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz(at)depesz(dot)com / aim:depeszhdl / skype:depesz_hdl / gg:6749007

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2010-08-15 05:32:12 Re: InitDB: Bad system call
Previous Message Thom Brown 2010-08-14 22:06:39 Re: Wrong "ORDER BY" on a numeric value result