我有一个带有datetime字段的SQL表。所讨论的字段可以为空。我有一个查询,我想要的结果排序由datetime字段上升,但我想要的行,其中的datetime字段是空在列表的结束,而不是在开始。

有什么简单的方法可以做到吗?


当前回答

使用NVL函数

  select * from MyTable order by NVL(MyDate, to_date('1-1-1','DD-MM-YYYY'))

以下是最著名的DBMS中NVL的替代方案

其他回答

使用NVL函数

  select * from MyTable order by NVL(MyDate, to_date('1-1-1','DD-MM-YYYY'))

以下是最著名的DBMS中NVL的替代方案

您可以使用内置函数检查null或非null,如下所示。我测试了它,它的工作良好。

select MyDate from MyTable order by ISNULL(MyDate,1)

order by -cast([nativeDateModify] as bigint) desc

在Oracle中,你可以使用NULLS FIRST或NULLS LAST:指定NULL值应该在非NULL值之前或之后返回:

ORDER BY { column-Name | [ ASC | DESC ] | [ NULLS FIRST | NULLS LAST ] }

例如:

ORDER BY date DESC NULLS LAST

裁判:http://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj13658.html

select MyDate
from MyTable
order by case when MyDate is null then 1 else 0 end, MyDate