I have a date column which has some NULL
. I want to order by the date column ASC, but I need the NULL
s to be at the bottom. How to do it on TSQL?
If you specify the ORDER BY clause, NULL values by default are ordered as less than values that are not NULL. Using the ASC order, a NULL value comes before any non-NULL value; using DESC order, the NULL comes last.
SQL treats NULL values to be less than 0 so while sorting in ascending order, NULL values always appear to be at first.
The ORDER BY clause is used to get the sorted records on one or more columns in ascending or descending order. The ORDER BY clause must come after the WHERE, GROUP BY, and HAVING clause if present in the query. Use ASC or DESC to specify the sorting order after the column name.
In standard SQL you can specify where to put nulls:
order by col asc nulls first order by col asc nulls last order by col desc nulls first order by col desc nulls last
but T-SQL doesn't comply with the standard here. The order of NULLs depends on whether you sort ascending or descending in T-SQL:
order by col asc -- implies nulls first order by col desc -- implies nulls last
With integers you could simply sort by the negatives:
order by -col asc -- sorts by +col desc, implies nulls first order by -col desc -- sorts by +col asc, implies nulls last
But this is not possible with dates (or strings for that matter), so you must first sort by is null / is not null and only then by your column:
order by case when col is null then 1 else 2 end, col asc|desc -- i.e. nulls first order by case when col is null then 2 else 1 end, col asc|desc -- i.e. nulls last
Select * From YourTable Order By case when DateCol is null then 0 else 1 end ,DateCol
Or even Order By IsNull(DateCol,'2525-12-31')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With