Thread: changing null-values' sort order

changing null-values' sort order

From
Date:
hi list
 
coming from the MS-SQL Server world, we're migrating our applications slowly to pgsql 8.1. now we thumbled on a problem with different sort-order behaviours:
 
we got a table with dated records:
table: votes (v_userid, v_date)
 
the v_date field can either be null or a date in the past. in mssql, sorting the table to list records in descending date-order
 
select v_date, v_userid from votes order by v_date desc
 
produces a list where first the records with dates are listed, and then the ones with nulls. in pgsql, the null-records are listed first before the date-records... how can this behaviour be changed?
 
mssql:
--------
2005-11-05  3
2005-11-01  4
2005-09-10  1
null  2
null  5
 
pgsql:
--------
null  2
null  5
2005-11-05  3
2005-11-01  4
2005-09-10  1
 
thanks in advance,
thomas

Re: changing null-values' sort order

From
Nikolay Samokhvalov
Date:
unfortunately, standard 'nulls first/last' isn't supported yet.
to change behaviour you should use following statement:
select v_date, v_userid from votes order by v_date is not null desc, v_date desc

or, something like this:
select v_date, v_userid from votes order by coalesce(v_date, XXX) desc
where XXX is substituted by the date value that is smaller than any
other used in your table

On 20/11/05, me@alternize.com <me@alternize.com> wrote:
>
> hi list
>
> coming from the MS-SQL Server world, we're migrating our applications slowly
> to pgsql 8.1. now we thumbled on a problem with different sort-order
> behaviours:
>
> we got a table with dated records:
> table: votes (v_userid, v_date)
>
> the v_date field can either be null or a date in the past. in mssql, sorting
> the table to list records in descending date-order
>
> select v_date, v_userid from votes order by v_date desc
>
> produces a list where first the records with dates are listed, and then the
> ones with nulls. in pgsql, the null-records are listed first before the
> date-records... how can this behaviour be changed?
>
> mssql:
> --------
> 2005-11-05  3
> 2005-11-01  4
> 2005-09-10  1
> null  2
> null  5
>
>
> pgsql:
> --------
>
> null  2
> null  52005-11-05  3
> 2005-11-01  4
> 2005-09-10  1
>
> thanks in advance,
> thomas


--
Best regards,
Nikolay