gpt4 book ai didi

sql - Oracle 排序顺序和大于运算符在 varchar 列上不一致

转载 作者:行者123 更新时间:2023-12-01 12:33:40 25 4
gpt4 key购买 nike

我有一张简单的 table

 CREATE TABLE TRIAL 
( "COL" VARCHAR2(20 BYTE)
)

我在那里插入两个值,“0”和“A”。

查询
select * from trial order by col

返回
A
0

按此顺序,而查询
select * from trial where col>'A'

不返回任何结果。
这种行为的原因可能是什么,是否有一些简单的技巧,无需更改数据库配置,即可获得 order by>以一致的方式行事?

编辑:

回答评论:
select * from v$parameter where name like 'nls_sort'

返回




select dump(col,16),col from trial

返回
Typ=1 Len=1: 30 0
Typ=1 Len=1: 41 A

最佳答案

它应该按字符串的二进制/ASCII 值排序。

http://www.ascii-code.com/

翻译值

  • 0 => 48
  • A => 65

  • 当您按 col 排序时,默认是升序,所以我希望 0先来,然后 A .

    当您要求 > 'A' 时,您要求的是 > 65,并且 'A' 或 '0' 都不大,所以这是有道理的。

    正如评论中提到的,我会检查您的排序 NLS_SORT值以查看排序是否有异常:

    https://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams130.htm#REFRN10127

    您还可以确保这与您的 NLS_COMP 匹配值(value):

    https://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams120.htm#REFRN10117

    您可以在此答案中找到更多信息:

    https://stackoverflow.com/a/7191170/137649

    关于sql - Oracle 排序顺序和大于运算符在 varchar 列上不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31295138/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com