oracle排序空值在最后,SQL如何使空值升序排序时最后

如果您的引擎允许ORDER BY x IS NULL, x或ORDER BY x NULLS LAST使用。但是,如果不是这样,这些方法可能会有所帮助:

如果按数字类型排序,则可以执行以下操作:(从另一个答案借用架构。)

SELECT *

FROM Employees

ORDER BY ISNULL(DepartmentId*0,1), DepartmentId;

结果显示按DepartmentId排序,最后为null

任何非空数都将变为0,并且空值将变为1,这将最后对空值进行排序。

您还可以对字符串执行此操作:

SELECT *

FROM Employees

ORDER BY ISNULL(LEFT(LastName,0),'a'), LastName

结果显示按LastName排序,其中null为last

因为'a'> ''。

这甚至可以通过强制为可为null的int并将上述方法用于int来处理日期:

SELECT *

FROM Employees

ORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate

(假设该模式具有HireDate。)

这些方法避免了必须提出或管理每种类型的“最大值”值或在数据类型(和最大值)发生更改时修复查询的问题(这是其他ISNULL解决方案所遇到的问题)。另外,它们比CASE短得多。