You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现SQL查询按字母排序并忽略括号?

解决SQL排序时忽略括号的问题

嗨,这个问题我之前处理过,原因很简单:括号()的ASCII码比小写字母a要小,所以直接用ORDER BY name排序时,带括号的字符串会排在字母开头的内容前面。要实现你想要的abc (stu) suv排序效果,核心思路是基于去掉括号后的字符串来排序,同时保留原字段的显示格式。

下面是不同主流数据库的具体实现方案:

  • MySQL/MariaDB
    用两次REPLACE函数分别移除左括号和右括号,再基于处理后的结果排序:

    SELECT name 
    FROM table1 
    ORDER BY REPLACE(REPLACE(name, '(', ''), ')', '');
    
  • PostgreSQL
    除了和MySQL一样用两次REPLACE,还可以用正则替换函数REGEXP_REPLACE一次性清除所有括号,写法更简洁:

    -- 两次REPLACE写法
    SELECT name 
    FROM table1 
    ORDER BY REPLACE(REPLACE(name, '(', ''), ')', '');
    
    -- 正则替换写法
    SELECT name 
    FROM table1 
    ORDER BY REGEXP_REPLACE(name, '[()]', '', 'g');
    

    这里的'[()]'是正则表达式,匹配左括号或右括号,'g'参数表示全局替换所有匹配的字符。

  • SQL Server
    同样可以用两次REPLACE函数实现需求:

    SELECT name 
    FROM table1 
    ORDER BY REPLACE(REPLACE(name, '(', ''), ')', '');
    

    如果你用的是SQL Server 2017及以上版本,也可以尝试TRANSLATE函数,但注意它只能将字符替换为其他字符(不能直接替换为空),所以还是两次REPLACE的方案更直接可靠。

这样执行后,查询返回的name字段会保留原始的带括号格式,但排序逻辑会忽略括号,正好得到你期望的abc (stu) suv排序结果。

内容的提问来源于stack exchange,提问作者Renan Aguiar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:27:18