Oracle SQL按字母排序结果不符合预期,如何修正?
不区分大小写的SQL排序解决方案
当前你的SQL语句使用order by name asc时,数据库默认采用区分大小写的排序规则,导致大写字母排在小写字母前,结果不符合预期。要实现不区分大小写的字母顺序排序,可通过以下两种常用方式调整:
方法1:统一转换为小写(或大写)后排序
将name字段转换为小写(或大写)再执行排序,以此忽略大小写差异:
select name, id from hes_std_name_id where id = 121 order by LOWER(name) asc;
方法2:使用不区分大小写的排序规则(数据库特定)
如果你的数据库支持指定排序规则,比如MySQL可使用utf8_general_ci(不区分大小写的排序规则),PostgreSQL可使用citext类型或指定COLLATE "en_US.utf8",以MySQL为例的示例语句:
select name, id from hes_std_name_id where id = 121 order by name collate utf8_general_ci asc;
调整后,查询结果会按照不区分大小写的字母顺序排列,得到你期望的输出:
| name |
|---|
| aa |
| AHAS |
| BETA |
| bios |
| cash |
| deposit |
内容的提问来源于stack exchange,提问作者Abinnaya
相关产品推荐
相关产品推荐

