如何使用NULLS FIRST或NULLS LAST函数在Oracle中设置空值排序优先级?
- 内容介绍
- 文章标签
- 相关推荐
本文共计884个文字,预计阅读时间需要4分钟。
Oracle数据库中空值默认排序行为为不确定,升序(ASC)时排最后,降序(DESC)时排最前。但无法满足业务中统一把NULL放最前/最后的需求——必须显式使用+ `NULLS FIRST` 或 `NULLS LAST` 控制排序。
Oracle 默认空值排序逻辑是什么
Oracle 把 NULL 视为“未知最大值”,不是 0、不是空字符串、也不等于自身。这导致:
-
ORDER BY col ASC:所有NULL排在非空值之后(即末尾) -
ORDER BY col DESC:所有NULL排在非空值之前(即开头) - 这种行为不可靠 —— 它依赖于排序方向,且和多数前端展示逻辑(比如“空姓名置顶”)冲突
用 NULLS FIRST 强制空值排最前
无论升序还是降序,加 NULLS FIRST 就能确保所有 NULL 记录出现在结果集头部:
SELECT * FROM employees ORDER BY hire_date NULLS FIRST;
SELECT * FROM employees ORDER BY hire_date DESC NULLS FIRST;
注意:NULLS FIRST 不改变字段本身的排序方向(ASC 还是 DESC),只决定 NULL 的位置优先级。
本文共计884个文字,预计阅读时间需要4分钟。
Oracle数据库中空值默认排序行为为不确定,升序(ASC)时排最后,降序(DESC)时排最前。但无法满足业务中统一把NULL放最前/最后的需求——必须显式使用+ `NULLS FIRST` 或 `NULLS LAST` 控制排序。
Oracle 默认空值排序逻辑是什么
Oracle 把 NULL 视为“未知最大值”,不是 0、不是空字符串、也不等于自身。这导致:
-
ORDER BY col ASC:所有NULL排在非空值之后(即末尾) -
ORDER BY col DESC:所有NULL排在非空值之前(即开头) - 这种行为不可靠 —— 它依赖于排序方向,且和多数前端展示逻辑(比如“空姓名置顶”)冲突
用 NULLS FIRST 强制空值排最前
无论升序还是降序,加 NULLS FIRST 就能确保所有 NULL 记录出现在结果集头部:
SELECT * FROM employees ORDER BY hire_date NULLS FIRST;
SELECT * FROM employees ORDER BY hire_date DESC NULLS FIRST;
注意:NULLS FIRST 不改变字段本身的排序方向(ASC 还是 DESC),只决定 NULL 的位置优先级。

