ORDER BY DATE首先显示NULLS,然后是最近的date

我有一个执行select语句的存储过程。 我希望我的结果按date字段sorting,并首先显示所有logging为NULLdate,然后显示最近的date。

声明如下所示:

SELECT a,b,c,[Submission Date] FROM someView ORDER BY [Submission Date] ASC 

现在,这将首先显示所有logging与NULL提交date,但是当我得到行中有date值的行,他们不是视图中的最近date。

如果我用DESCreplaceASC,那么我按照我想要的顺序得到date,但是NULL值在我的结果集的底部。

有没有什么办法来构build我的查询,以便我可以显示顶部的空值,然后当有date值,以降序(从最近到最早)?

@克里斯,你几乎拥有它。

 ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, [Submission Date] DESC 

[编辑:#Eppz问我如上所示调整上面的代码]

我个人比创build“魔术数字”更好。 魔术数字几乎总是一个等待发生的问题。

你可以这样做,把NULL放在最下面:

 ORDER BY [Submission Date] IS NULL DESC, [Submission Date] ASC 

标准SQL(ISO / IEC 9075-2:2003或更高版本 – 2008)规定:

 ORDER BY SomeColumn NULLS FIRST 

大多数DBMS实际上并不支持这个,AFAIK。

尝试

 SELECT a,b,c,[Submission Date] FROM someView ORDER BY isnull([Submission Date],cast('2079/01/01' as datetime)) ASC 
 OrderBy="ColumnName = NULL desc, ColumnName desc" 

尝试这个

SELECT a,b,c,[提交date] FROM someView ORDER BY isnull([Submission Date],cast('1770/01/01'as datetime))ASC

我知道这是旧的,但是当我发现它时,我注意到接受的解决scheme,可以通过使CASE语句的结果是今天(GETDATE())简化,可以通过https://stackoverflow.com/a/821856/7177892或实际date。;

原版的:

 ORDER BY (CASE WHEN [Submission Date] IS NULL THEN 1 ELSE 0 END) DESC, [Submission Date] DESC 

简化:

 ORDER BY (CASE WHEN [Submission Date] IS NULL THEN GETDATE() ELSE [Submission Date] END) DESC