Thread: Sorting problem

Sorting problem

From
"George A.J"
Date:
hi all,
i am using postgres 7.3.2 .i am converitng a mssql database to postgres.
now i am facing a strange problem. sorting based on a varchar field is not working
as expected. the non alphanumeric characters are not sorting based on the ascii
value of them.
 
i have the following table structure..
 
create table accounts
(
  AcNo varchar (10),
  Name varchar(100),
  balance numeric(19,4)
)
 
when i used the query select  * from accounts order by acno. the result is not correct
 
suppose that the acno field contains values '###1' ,'###2' ,'##10' , '#100'
the sort order in postgres is
'###1'
'##10'
'#100'
'###2'
 But i want the result as follows
'###1'
'###2'
'##10'
'#100'
 
that means the ascii value of # should be considered for sorting..
what is the problem. is it the behaviour of postgres.
do i need to change any configuration. i am using all default configurations
or is it a bug...?
the problem actually is of < & > operators for varchar.
 
in a simple comparison
 
select '###2' < '##10'
 
returns false but i need true.
 
is there any solution exist. even if i replaced # with any non alphanumeric
character the result is same..
 
pls help
 
jinu jose


Do you Yahoo!?
The New Yahoo! Shopping - with improved product search

Re: Sorting problem

From
Stephan Szabo
Date:
On Tue, 14 Oct 2003, George A.J wrote:

> hi all,
> i am using postgres 7.3.2 .i am converitng a mssql database to postgres.
> now i am facing a strange problem. sorting based on a varchar field is not working
> as expected. the non alphanumeric characters are not sorting based on the ascii
> value of them.

What OS and locale are you using?  If it's not "C", you're probably
getting bit by the fact that many natural language collations (such as
en_US for example) don't consider most of the symbols except as tie
breakers when sorting.  Unfortunately, to change the locale you need to
run initdb again with the appropriate locale, something like:
LANG="C" initdb -D /path/to/dataspace




Re: Sorting problem

From
Jean-Luc Lachance
Date:
You are obviously not using C locale.
If you can't change it for some reason, you can use:

select * from accounts order by int4( trim( acno, '#'));

JLL

"George A.J" wrote:
> 
> hi all,
> i am using postgres 7.3.2 .i am converitng a mssql database to
> postgres.
> now i am facing a strange problem. sorting based on a varchar field is
> not working
> as expected. the non alphanumeric characters are not sorting based on
> the ascii
> value of them.
> 
> i have the following table structure..
> 
> create table accounts
> (
>   AcNo varchar (10),
>   Name varchar(100),
>   balance numeric(19,4)
> )
> 
> when i used the query select  * from accounts order by acno. the
> result is not correct
> 
> suppose that the acno field contains values '###1' ,'###2' ,'##10' ,
> '#100'
> the sort order in postgres is
> '###1'
> '##10'
> '#100'
> '###2'
>  But i want the result as follows
> '###1'
> '###2'
> '##10'
> '#100'
> 
> that means the ascii value of # should be considered for sorting..
> what is the problem. is it the behaviour of postgres.
> do i need to change any configuration. i am using all default
> configurations
> or is it a bug...?
> the problem actually is of < & > operators for varchar.
> 
> in a simple comparison
> 
> select '###2' < '##10'
> 
> returns false but i need true.
> 
> is there any solution exist. even if i replaced # with any non
> alphanumeric
> character the result is same..
> 
> pls help
> 
> jinu jose
> 
> ----------------------------------------------------------------------
> Do you Yahoo!?
> The New Yahoo! Shopping - with improved product search


Re: Sorting problem

From
"R. van Twisk"
Date:
I think what you actually want is natural sorting.

Ries

> -----Oorspronkelijk bericht-----
> Van: pgsql-sql-owner@postgresql.org
> [mailto:pgsql-sql-owner@postgresql.org]Namens Jean-Luc Lachance
> Verzonden: woensdag 15 oktober 2003 17:43
> Aan: George A.J
> CC: pgsql-sql@postgresql.org
> Onderwerp: Re: [SQL] Sorting problem
> 
> 
> You are obviously not using C locale.
> If you can't change it for some reason, you can use:
> 
> select * from accounts order by int4( trim( acno, '#'));
> 
> JLL
> 
> "George A.J" wrote:
> > 
> > hi all,
> > i am using postgres 7.3.2 .i am converitng a mssql database to
> > postgres.
> > now i am facing a strange problem. sorting based on a 
> varchar field is
> > not working
> > as expected. the non alphanumeric characters are not 
> sorting based on
> > the ascii
> > value of them.
> > 
> > i have the following table structure..
> > 
> > create table accounts
> > (
> >   AcNo varchar (10),
> >   Name varchar(100),
> >   balance numeric(19,4)
> > )
> > 
> > when i used the query select  * from accounts order by acno. the
> > result is not correct
> > 
> > suppose that the acno field contains values '###1' ,'###2' ,'##10' ,
> > '#100'
> > the sort order in postgres is
> > '###1'
> > '##10'
> > '#100'
> > '###2'
> >  But i want the result as follows
> > '###1'
> > '###2'
> > '##10'
> > '#100'
> > 
> > that means the ascii value of # should be considered for sorting..
> > what is the problem. is it the behaviour of postgres.
> > do i need to change any configuration. i am using all default
> > configurations
> > or is it a bug...?
> > the problem actually is of < & > operators for varchar.
> > 
> > in a simple comparison
> > 
> > select '###2' < '##10'
> > 
> > returns false but i need true.
> > 
> > is there any solution exist. even if i replaced # with any non
> > alphanumeric
> > character the result is same..
> > 
> > pls help
> > 
> > jinu jose
> > 
> > 
> ----------------------------------------------------------------------
> > Do you Yahoo!?
> > The New Yahoo! Shopping - with improved product search
> 
> ---------------------------(end of 
> broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
> 
>                http://www.postgresql.org/docs/faqs/FAQ.html
>