加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么Oracle的varchar排序顺序与varchar比较的行为不匹配?

发布时间:2020-12-12 13:09:32 所属栏目:百科 来源:网络整理
导读:像这样的SQL语句 select * from ( select '000000000000' as x from dual union select '978123456789' as x from dual union select 'B002AACD0A' as x from dual) /*where x'000000000000'*/ order by x; 产量 B002AACD0A000000000000978123456789 取消注
像这样的SQL语句
select * from (
  select '000000000000' as x from dual
  union
  select '978123456789' as x from dual
  union 
  select 'B002AACD0A' as x from dual
) /*where x>'000000000000'*/ order by x;

产量

B002AACD0A
000000000000
978123456789

取消注释WHERE限制后,结果是

B002AACD0A
978123456789

我原本期望结果只是978123456789,因为在没有限制的情况下运行查询时,在000000000000之前返回B002AACD0A.

如何解释这种行为?我应该如何排序和比较varchars,以便它们可以像我可以用整数一样工作?

编辑:有趣的是,当将限制更改为x>’B002AACD0A’时,结果为空.将其更改为tox> 978123456789将返回B002AACD0A.

即比较时:

B002AACD0A > 978123456789 > 000000000000

但在排序时

978123456789 > 000000000000 > B002AACD0A

编辑2:当明确地使用二进制排序时(按NLSSORT(x,’NLS_SORT = BINARY_AI’)排序),结果是B002AACD0A> 978123456789> 000000000000并且匹配比较的行为.但我仍然不知道为什么会发生这种情况.

彼得,

排序的行为由NLS_SORT会话参数调节,而比较的行为取决于NLS_COMP参数.你必须有不匹配.

我获得与使用以下参数相同的结果:

SQL> SELECT *
  2    FROM nls_session_parameters
  3   WHERE parameter IN ('NLS_COMP','NLS_SORT');

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_SORT                       FRENCH
NLS_COMP                       BINARY

但是当两者匹配时,结果是一致的:

SQL> alter session set nls_comp=LINGUISTIC;

Session altered

SQL> select * from (
  2    select '000000000000' as x from dual
  3    union
  4    select '978123456789' as x from dual
  5    union
  6    select 'B002AACD0A' as x from dual
  7  ) /*where x>'000000000000'*/ order by x;

X
------------
B002AACD0A
000000000000
978123456789

SQL> select * from (
  2    select '000000000000' as x from dual
  3    union
  4    select '978123456789' as x from dual
  5    union
  6    select 'B002AACD0A' as x from dual
  7  ) where x > '000000000000' order by x;

X
------------
978123456789

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读