SQL排序升序但空值降序

时间:2015-07-29 14:01:55

标签: sql-server sorting sql-server-2012

表具有可为空的ContactDate字段。我想对这些记录进行排序,以便非空值首先按升序排列,然后在非可空值之后对空值进行排序。

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

2 个答案:

答案 0 :(得分:5)

case中使用order by语句。

<强>查询

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

Fiddle demo

答案 1 :(得分:0)

您可以使用ISNULL()将NULL值转换为9999-12-31,然后order by ContactDate:

SELECT * FROM myTable
ORDER BY ISNULL(CONVERT(VARCHAR, ContactDate), '9999-12-31') ASC