WITH
tbl (A_TEXT) AS
(
Select 'AHAS' From Dual Union All
Select 'BETA' From Dual Union All
Select 'aa' From Dual Union All
Select 'bios' From Dual Union All
Select 'cash' From Dual Union All
Select 'deposit' From Dual
)
然后(对于前两个字母)你的查询的ASCII表示,如问题中的Order By子句,将如下所示:
-- Your Order By clause
Select A_TEXT,
'--->' "AS_IS",
SubStr(A_TEXT, 1, 1) || '_' || SubStr(A_TEXT, 2, 1) "TXT",
ASCII(SubStr(A_TEXT, 1, 1)) || '_' || ASCII(SubStr(A_TEXT, 2, 1)) "AS_IS_ASCII"
From tbl
Order By A_TEXT
A_TEXT AS_IS TXT AS_IS_ASCII
------- ----- --- ------------
AHAS ---> A_H 65_72
BETA ---> B_E 66_69
aa ---> a_a 97_97
bios ---> b_i 98_105
cash ---> c_a 99_97
deposit ---> d_e 100_101
2条答案
按热度按时间8qgya5xd1#
看起来您只想执行不区分大小写的排序。最简单的选择是
您还可以考虑将会话的
nls_comp
和nls_sort
设置为LINGUISTIC
和BINARY_CI
,以便所有查询都进行不区分大小写的搜索和排序。但这会产生更广泛的影响,包括优化器使用在具有不同nls_comp
和nls_sort
设置的会话中创建的索引的能力。btqmn9zl2#
试着通过ASCII表来查看它。如果您的示例数据是:
然后(对于前两个字母)你的查询的ASCII表示,如问题中的Order By子句,将如下所示:
...但是如果你在Order By子句中使用Upper()或Lower()函数,它会像下面这样(又是第一个两个字母):