Thread: Sorting problem
Hi all, I have a problem sorting varchar fields. I will explain the problem with a simple example: this query select '##10' as sortfield union select '###1' as sortfield order by sortfield produces this correct output: '###1' '##10' but this one select '##10############--------####79909999' as sortfield union select '###1############--------####79909999' as sortfieldorder by sortfield produces this wrong output: '##10############--------####79909999' '###1############--------####79909999' I'm using postgresql 7.4.3 on Suse Linux 9.1. I created my db using: initdb --pgdata=../data/ --encoding=LATIN1 --lc-collate=it_IT --lc-ctype=it_IT Any suggestion? Tia Ruggero
On Mon, 12 Jul 2004, Ruggero wrote: > Hi all, > I have a problem sorting varchar fields. > I will explain the problem with a simple example: > > this query > select '##10' as sortfield > union > select '###1' as sortfield > order by sortfield > produces this correct output: > '###1' > '##10' > > but this one > > select '##10############--------####79909999' as sortfield > union > select '###1############--------####79909999' as sortfield > order by sortfield > produces this wrong output: > '##10############--------####79909999' > '###1############--------####79909999' > > I'm using postgresql 7.4.3 on Suse Linux 9.1. > I created my db using: initdb --pgdata=../data/ --encoding=LATIN1 > --lc-collate=it_IT --lc-ctype=it_IT > > Any suggestion? it_IT looks like it's sorting based on the strings with the symbols removed. I get similar behavior on my system using the unix sort command with it_IT. This looks like it's a mismatch between what you want and the collation you've provided.
Pop text in front of that first value and it works: template1=# select text '##10############--------####79909999' template1=# as "sortfield" template1-# union template1-# select '###1############--------####79909999' template1-# order by sortfield; sortfield --------------------------------------###1############--------####79909999##10############--------####79909999 (2 rows) Stu Ruggero wrote: > Hi all, > I have a problem sorting varchar fields. > I will explain the problem with a simple example: > > this query > select '##10' as sortfield > union > select '###1' as sortfield > order by sortfield > produces this correct output: > '###1' > '##10' > > but this one > > select '##10############--------####79909999' as sortfield > union > select '###1############--------####79909999' as sortfield > order by sortfield > produces this wrong output: > '##10############--------####79909999' > '###1############--------####79909999' > > I'm using postgresql 7.4.3 on Suse Linux 9.1. > I created my db using: initdb --pgdata=../data/ --encoding=LATIN1 > --lc-collate=it_IT --lc-ctype=it_IT > > Any suggestion? > Tia > Ruggero