34

有没有办法将 Oracle 使用的默认顺序设置为NULL LAST(或NULL FIRST),而不必将其放在每个查询中?

4

6 回答 6

50

不,无法更改and的默认行为NULLS FIRSTNULLS 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 的不同类型。

于 2013-09-09T23:34:20.447 回答
15

不,没有 usingorder by子句就无法启用默认排序,它允许您将NULLs 放在最后或第一个。这是一个例子:

  1. 升序

    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
    
  2. 降序

      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
    
于 2013-09-09T13:04:34.087 回答
3

ORDER BY EMPLOYER_NAME DESC NULLS LAST

以上在 Oracle 11g 上对我有用

于 2020-10-02T11:10:26.527 回答
2

按升序,NULL 值总是排在最后

于 2013-09-09T12:39:37.677 回答
0

null放在最后,但仍按asc 排序

SELECT * FROM users ORDER BY -created_at desc;

答案来源

于 2021-09-16T14:00:07.007 回答
0

COALESCE 函数

我很惊讶没有人提到它,但是您可以使用COALESCE从参数中取出第一个非空值的函数。在大多数 DBMS 中可用:

SELECT [Name], [Email] FROM Users
ORDER BY COALESCE([Name], 'zzz')

基本上这是如何工作的:如果 [Name] is null,该函数将返回 'zzz' 将记录向下推。它在大多数情况下都可以解决问题。文档在这里

于 2021-12-20T21:14:06.923 回答