2015-07-29 2 views
1

Таблица имеет поле с именем NULLEDDATE. Я хочу сортировать эти записи так, чтобы непустые значения приходили сначала в порядке возрастания, а затем нулевые значения сортировались после значений, отличных от NULL.SQL sort по возрастанию, но null значения по убыванию

Select * from myTable Order by ContactDate ASC 

возвращает следующие

NULL 
NULL 
NULL 
NULL 
2015-07-27 10:00:00.000 
2015-07-29 10:00:00.000 

затем,

Select * from myTable Order by ContactDate DESC 

возвращает следующие

2015-07-29 10:00:00.000 
2015-07-27 10:00:00.000 
NULL 
NULL 
NULL 
NULL 

Но мне это нужно так:

2015-07-27 10:00:00.000 -- asc 
2015-07-29 10:00:00.000 -- asc 
NULL 
NULL 
NULL 
NULL 

Использование MS SQL Server 2012

+0

Try 'ORDER BY ContactDate ASC NULLS LAST'. Это работает в postgresql, не уверен в sql-сервере. –

ответ

5

Используйте case заявление в order by.

Запрос

select * from myTable 
order by case when ContactDate is null then 1 
else 0 end,ContactDate; 

Fiddle demo

+0

Почему downvote ?? Что случилось с моим запросом? – Wanderer

0

Вы можете использовать ISNULL() для преобразования NULL значения в 9999-12-31, а затем order by ContactDate:

SELECT * FROM myTable 
ORDER BY ISNULL(CONVERT(VARCHAR, ContactDate), '9999-12-31') ASC 
Смежные вопросы