以与 MS SQL Server 2005/2008(最好是 Oracle)兼容的方式使用 C# 中的 NHibernate 和仅 HQL(不是 SQL)。
有没有办法编写 order by 子句,以便空值将在查询结果的末尾排序,而非空结果将按升序排序?
根据 nickf 引用的问题的答案,答案是:
select x from MyClass x order by case when x.MyProperty is null then 1 else 0 end, x.MyProperty
以与 MS SQL Server 2005/2008(最好是 Oracle)兼容的方式使用 C# 中的 NHibernate 和仅 HQL(不是 SQL)。
有没有办法编写 order by 子句,以便空值将在查询结果的末尾排序,而非空结果将按升序排序?
根据 nickf 引用的问题的答案,答案是:
select x from MyClass x order by case when x.MyProperty is null then 1 else 0 end, x.MyProperty
我不知道这是否有帮助,但是还有另一个问题询问有关如何使用 MySQL 执行此操作的相同问题。
也许相同的逻辑可以应用于 HQL?
编辑:这被接受了,所以显然,是的。
这是该问题的公认答案(Bill Karwin):
SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
有一次,我只是放弃并修复了我的收藏类中的排序顺序。
因为我只是在移动 NULL,所以我所要做的就是在集合的开头剥离 null 并将它们附加到末尾。
有了切刀编码的赌注,它甚至可以在数组上完成。
尽管如此,ORDER BY CASE 是一个利落且易读的技巧。