有没有办法将 Oracle 使用的默认顺序设置为NULL LAST(或NULL FIRST),而不必将其放在每个查询中?
6 回答
不,无法更改and的默认行为NULLS FIRST
NULLS LAST
:
NULLS LAST 是升序的默认值,NULLS FIRST 是降序的默认值。
我无法证明它是不可能改变的,但我在最有可能实现的地方找不到这样的功能。
SQL 选项手册没有提及任何内容。
参数没有 nls 参数V$PARAMETER
控制它:select * from v$parameter where name like '%nls%';
隐藏参数没有隐藏参数。我尝试搜索 %null% 或 %sort% 之类的内容,但它们似乎都不相关。
Locale Builder Oracle 允许您创建自己的自定义排序。它有很多选项,但没有一个允许您定义 NULL 的排序方式。将主要排序和次要排序数字设置得非常高或低并不会改变它(我希望 NULL 被实现为硬编码的小值或大值)。您可以为 0x0000 设置排序顺序,即“NULL”,但这是 NULL 的不同类型。
不,没有 usingorder by
子句就无法启用默认排序,它允许您将NULL
s 放在最后或第一个。这是一个例子:
升序
SQL> with t1(col) as( 2 select 1 from dual union all 3 select 2 from dual union all 4 select null from dual union all 5 select 3 from dual 6 ) 7 select * 8 from t1 9 order by col asc nulls last 10 ;
结果:
COL ------ 1 2 3 null
降序
SQL> with t1(col) as( 2 select 1 from dual union all 3 select 2 from dual union all 4 select null from dual union all 5 select 3 from dual 6 ) 7 select * 8 from t1 9 order by col desc nulls last 10 ;
结果:
COL ---------- 3 2 1 null
ORDER BY EMPLOYER_NAME DESC NULLS LAST
以上在 Oracle 11g 上对我有用
按升序,NULL 值总是排在最后
COALESCE 函数
我很惊讶没有人提到它,但是您可以使用COALESCE
从参数中取出第一个非空值的函数。在大多数 DBMS 中可用:
SELECT [Name], [Email] FROM Users
ORDER BY COALESCE([Name], 'zzz')
基本上这是如何工作的:如果 [Name] is null
,该函数将返回 'zzz' 将记录向下推。它在大多数情况下都可以解决问题。文档在这里。