【发布时间】:2014-05-16 16:31:56
【问题描述】:
场景:
我有一个简单的SELECT 查询,它从单个表中检索数据,按日期字段排序(此处的日期字段表示类似于“结束日期”)。应用逻辑是,如果这个“结束日期”为空,那么记录表示当前事件。现在,这些记录显示在按此结束日期排序的列表中,以便最新的记录显示在顶部。
显然,由于 NULL 日期记录被应用程序视为“当前”,因此它们需要位于此记录列表的顶部。如何让 SQL Server 2012 将它们排序到列表顶部?注意 -- 您可以在 ORDER BY 中使用伪(虚拟)值,但不能在 SELECT 部分选择此伪值。
这是我当前的查询(它不处理 NULL,“ContractEndDate”是我们感兴趣的日期字段):
SELECT
[Id], [UserName], [ContractEndDate]
FROM
[UserContracts]
ORDER BY
[ContractEndDate] DESC
任何指针都会很有用。
【问题讨论】:
-
当您使用
Order By作为日期列时,NULL的值无论如何都会排在最前面?那么这里有什么问题 -
它没有那样做......这就是问题所在。在我的调试表中,我有三行,其中 2 个日期值为 NULL,第三行是 2013 年 1 月 1 日。期望看到 NULL,NULL 1-1-2013。但是当我运行上面的代码时,我看到 2013 年 1 月 1 日,NULL,NULL。那不是我想要的。
标签: sql sql-server sorting date