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

我有一个带日期时间字段的SQL表。有问题的字段可以为空。我有一个查询,我希望结果按datetime字段升序排序,但是我希望datetime字段在列表的末尾而不是开头的行为null。

有没有简单的方法可以做到这一点?


LEATH
浏览 1441回答 3
3回答

呼如林

select MyDatefrom MyTableorder by case when MyDate is null then 1 else 0 end, MyDate

Qyouu

(“位”晚了,但这一点都没有提到)您未指定DBMS。您可以在标准SQL(以及大多数现代DBMS(如Oracle,PostgreSQL,DB2,Firebird,Apache Derby,HSQLDB和H2)中)指定NULLS LAST或NULLS FIRST:用于NULLS LAST将它们排序到末尾:select *from some_tableorder by some_column DESC NULLS LAST

繁花不似锦

如果您的引擎允许ORDER BY x IS NULL, x或ORDER BY x NULLS LAST使用。但是,如果不是这样,这些方法可能会有所帮助:如果按数字类型排序,则可以执行以下操作:(从另一个答案借用架构。)SELECT *          FROM EmployeesORDER BY ISNULL(DepartmentId*0,1), DepartmentId;结果显示按DepartmentId排序,最后为null任何非空数都将变为0,并且空值将变为1,这将最后对空值进行排序。您还可以对字符串执行此操作:SELECT *FROM EmployeesORDER BY ISNULL(LEFT(LastName,0),'a'), LastName结果显示按LastName排序,其中null为last因为'a'> ''。这甚至可以通过强制为可为null的int并将上述方法用于int来处理日期:SELECT *FROM EmployeesORDER BY ISNULL(CONVERT(INT, HireDate)*0, 1), HireDate(假设该模式具有HireDate。)这些方法避免了必须提出或管理每种类型的“最大值”值或在数据类型(和最大值)发生更改时修复查询的问题(这是其他ISNULL解决方案所遇到的问题)。另外,它们比CASE短得多。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server