如何使SQL查询结果先返回以B开头的城市,再返回含B的城市?
解决方案
首先,你当前的WHERE条件存在冗余:name like 'b%' 已经被 name like '%b%' 包含,所以可以简化为只保留后者。
要实现先展示以B开头的城市,再展示包含B但不以B开头的城市的排序需求,核心是在ORDER BY中通过条件判断给两类结果分配不同的优先级,具体写法如下:
SELECT name FROM tb_city WHERE name LIKE '%b%' ORDER BY CASE WHEN name LIKE 'b%' THEN 1 ELSE 2 END, name;
细节说明:
CASE语句会给以B开头的城市标记为优先级1,其他包含B的城市标记为优先级2,排序时优先级1的结果会自然排在前面。- 第二个排序字段
name是可选的,用来在同一优先级内对城市名称进行常规排序(比如按字母顺序),如果不需要统一组内排序可以去掉。
如果你的SQL环境对大小写敏感(区分大写B和小写b),可以用统一大小写的方式来匹配:
SELECT name FROM tb_city WHERE LOWER(name) LIKE '%b%' ORDER BY CASE WHEN LOWER(name) LIKE 'b%' THEN 1 ELSE 2 END, name;
内容的提问来源于stack exchange,提问作者Mor Biton
相关产品推荐
相关产品推荐

