我有一张简单的 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
值匹配: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/