Oracle SQL实现不区分大小写排序且大写字母优先
Oracle SQL实现不区分大小写但大写优先的排序
要实现不区分大小写排序,但相同拼写的大写形式排在小写形式之前,需要分两级排序:先按不区分大小写的规则分组,再在组内按区分大小写的二进制规则排序,确保大写优先。
你当前使用的NLS_SORT=BINARY_AI会同时忽略大小写和重音,导致大小写形式的相同词汇被视为完全等价,无法区分顺序。
正确的查询语句
SELECT column_name FROM your_table ORDER BY NLSSORT(column_name, 'NLS_SORT=BINARY_CI'), -- 第一级:不区分大小写分组排序 NLSSORT(column_name, 'NLS_SORT=BINARY'); -- 第二级:区分大小写,大写优先
原理说明
BINARY_CI(Case-Insensitive):仅忽略大小写,将相同拼写的词汇归为同一组(例如"Apple"和"apple"会被分到同一组)。BINARY:严格按照ASCII码排序,由于大写字母的ASCII值小于对应小写字母(如'A'=65,'a'=97),因此同一组内大写形式会排在小写形式之前。
验证示例
使用该语句后,你的示例数据会按期望顺序输出:
Apple
apple
Banana
banana
Bananb
Grape
orange
Pineapple
内容的提问来源于stack exchange,提问作者Zak FST
相关产品推荐
相关产品推荐

