首页 > 解决方案 > 有没有办法像空元素一样订购空元素?

问题描述

我需要订购一列并且有很多元素为空或空。问题是空元素的排序与空元素不同

SELECT s.name         
                   FROM Employee s
                 ORDER BY s.name desc

结果 about 是员工name==null是第一个位置,之后是具有 name!=null 的元素(是真实姓名),最后是具有 的元素name empty

我希望name=nullandname=empty以相同的方式处理并将所有内容放在第一个结果中?任何人都可以帮助我吗?

标签: sqloraclesql-order-by

解决方案


您可以使用nulls firstornulls last子句来确定空值的排序位置,即

order by s.name desc nulls last

如果您希望null值最后排序而不是第一个或

order by s.name desc nulls first

如果你想要他们那么先排序

在 Oracle 中,没有与空字符串分开的东西,null因此当您说“空”时,您的意思并不明显。我的猜测是你的意思是一个包含一个或多个空格的字符串,没有别的。如果您想在排序之前从字符串中删除空格,以便将name1 个空格或 10 个空格的 a 视为与 相同null,您可以trim将 name

order by trim(s.name) desc nulls first

请注意,如果 Oracle 使用索引进行name排序,这可能会影响性能(在这种没有 where 子句的特殊情况下不太可能,但这在实际查询中可能很重要)。您可能需要一个基于函数的索引trim(name)来支持排序。


推荐阅读