在Oracle ORDER BY中忽略与号(&)字符

|| 我在Oracle中运行查询,该查询按可能带有&符的列排序。但是,排序算法似乎忽略了&符。 例如:
select * from (
    select \'&\' txt from dual
    union
    select \'P\' txt from dual
    union
    select \'N\' txt from dual
)
order by txt
准确打印(我猜是正确的):
&
N
P
但是,如果我将\'&\'更改为\'&Z \',则结果将更改:
select * from (
    select \'&\'||\'Z\' txt from dual // concatenating just to
                                  // avoid variable substitution
    union
    select \'P\' txt from dual
    union
    select \'N\' txt from dual
)
order by txt
结果是:
N
P
&Z
如果将\'Z \'更改为\'A \',则结果为:
&A
N
P
似乎ORDER BY子句未考虑\'&\'。有谁知道这是否是预期的行为,或者我是否缺少某些配置步骤?我知道有人需要使用&号进行插入或更新。但是问题是角色已经在桌子上了! 预先谢谢大家。     
已邀请:
这是语言排序的效果:
SQL> alter session set nls_sort=binary;

Session altered.

SQL> get afiedt.buf
  1  select * from (
  2  select \'&\' txt from dual
  3  union
  4  select \'&\'||\'Z\' txt from dual
  5  union
  6  select \'&\'||\'A\' txt from dual
  7  union
  8  select \'P\' txt from dual
  9  union
 10  select \'N\' txt from dual
 11  )
 12* order by txt
SQL> /

TX
--
&
&A
&Z
N
P

SQL> alter session set nls_sort = \'Dutch\';

Session altered.

SQL> get afiedt.buf
  1  select * from (
  2  select \'&\' txt from dual
  3  union
  4  select \'&\'||\'Z\' txt from dual
  5  union
  6  select \'&\'||\'A\' txt from dual
  7  union
  8  select \'P\' txt from dual
  9  union
 10  select \'N\' txt from dual
 11  )
 12* order by txt
SQL> /

TX
--
&
&A
N
P
&Z
确实会影响您选择的语言。某些字符根据其语言而具有不同的值。对于二进制文件,可以使用ascii值进行排序。     
这可能取决于您的NLS_LANGUAGE和NLS_SORT设置。 我在Oracle 10g上获得了以下内容,其中NLS_LANGUAGE =
AMERICAN
并且NLS_SORT =(空)。
TXT 
--- 
&   
N   
P   

TXT 
--- 
&Z  
N   
P   
    

要回复问题请先登录注册