【发布时间】:2013-09-12 22:43:14
【问题描述】:
有没有办法将 Oracle 使用的 default 顺序设置为 NULL LAST(或 NULL FIRST),而不必放置它在每个查询中?
【问题讨论】:
有没有办法将 Oracle 使用的 default 顺序设置为 NULL LAST(或 NULL FIRST),而不必放置它在每个查询中?
【问题讨论】:
不行,没办法改the default behavior of NULLS FIRST and NULLS LAST:
NULLS LAST 是升序的默认值,NULLS FIRST 是 默认为降序。
我无法证明它是不可能改变的,但我在最有可能实现的地方找不到这样的功能。
SQL 选项manual 没有提及任何内容。
参数V$PARAMETER中的nls参数都没有控制它:select * from v$parameter where name like '%nls%';
隐藏参数没有hidden parameter。我试着搜索任何东西 像 %null% 或 %sort%,它们都不相关。
Locale Builder Oracle 允许您create your own custom sorting。它 有很多选项,但没有一个允许您定义 NULL 的排序方式。将主要排序和次要排序数字设置得非常高或低并不 更改它(我希望将 NULL 实现为硬编码的小值或大值)。您可以为 0x0000 设置排序顺序,即“NULL”,但这是另一种类型的 NULL。
【讨论】:
不,如果不使用order by 子句,就无法启用默认排序,它允许您将NULLs 放在最后或最前面。这是一个例子:
升序
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 函数从参数中取出第一个非空值。在大多数 DBMS 中可用:
SELECT [Name], [Email] FROM Users
ORDER BY COALESCE([Name], 'zzz')
这基本上是如何工作的:如果 [Name] 是 null,该函数将返回 'zzz' 将记录向下推。它在大多数情况下都可以解决问题。文档here。
【讨论】:
ORDER BY Name NULLS LAST好吗?