3 回答
TA贡献1798条经验 获得超3个赞
select MyDate
from MyTable
order by case when MyDate is null then 1 else 0 end, MyDate
TA贡献1786条经验 获得超11个赞
(“位”晚了,但这一点都没有提到)
您未指定DBMS。
您可以在标准SQL(以及大多数现代DBMS(如Oracle,PostgreSQL,DB2,Firebird,Apache Derby,HSQLDB和H2)中)指定NULLS LAST或NULLS FIRST:
用于NULLS LAST将它们排序到末尾:
select *
from some_table
order by some_column DESC NULLS LAST
TA贡献1851条经验 获得超4个赞
如果您的引擎允许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短得多。
- 3 回答
- 0 关注
- 1487 浏览
添加回答
举报