Thread: Obscure behavior of ORDER BY

Obscure behavior of ORDER BY

From
Tambet Matiisen
Date:
Hi everyone!

I recently noticed obscure behavior of ORDER BY. Consider this example:

select email from
(
select '@'::text as email
union all
select '.'::text as email
) a
order by email;

The result is: email
------- . @
(2 rows)

This is all normal - I expect, that dot is smaller than ampersand. But 
if I add anything after dot, the order is reversed:

select email from
(
select '@'::text as email
union all
select '.m'::text as email
) a
order by email

The result is: email
------- @ .m
(2 rows)

Why is this happening? As dot is smaller than ampersand, anything after 
dot shouldn't matter.

I'm using PostgreSQL 8.4.7 on 32-bit Debian.

Thanks in advance,  Tambet


Re: Obscure behavior of ORDER BY

From
Pavel Stehule
Date:
Hello

this behave depends on your language rules. So this behave can be ok.

pavel=# select * from (values('.'),('@'),('.xxx'),(' xxxx')) x order by 1;column1
─────────.@.xxx xxxx
(4 rows)

you can se  so string with space on start is on end and this is
correct, because spaces and white chars are ignored.

Regards

Pavel Stehule.

2011/3/21 Tambet Matiisen <tambet.matiisen@gmail.com>:
> Hi everyone!
>
> I recently noticed obscure behavior of ORDER BY. Consider this example:
>
> select email from
> (
> select '@'::text as email
> union all
> select '.'::text as email
> ) a
> order by email;
>
> The result is:
>  email
> -------
>  .
>  @
> (2 rows)
>
> This is all normal - I expect, that dot is smaller than ampersand. But if I
> add anything after dot, the order is reversed:
>
> select email from
> (
> select '@'::text as email
> union all
> select '.m'::text as email
> ) a
> order by email
>
> The result is:
>  email
> -------
>  @
>  .m
> (2 rows)
>
> Why is this happening? As dot is smaller than ampersand, anything after dot
> shouldn't matter.
>
> I'm using PostgreSQL 8.4.7 on 32-bit Debian.
>
> Thanks in advance,
>  Tambet
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql
>