| 
                         我有一个具有列(cat_name)的表.有些是字符串后跟数字,其他字符串只是普通字符串.我喜欢通过首先将所有字符串以’Level’开头来安排它. 
期望的输出: 
> 1级物品 > 2级项目 > 3级物品 > 5级物品 > 10级物品 > 12级物品 > 22级物品 > Apple >芒果 >其他 >特别项目 
我用过这个查询 
SELECT * FROM category ORDER BY
(CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END) ASC,cat_name
 
得到了 
> 1级物品 > 10级物品 > 12级物品 > 2级项目 > 22级物品 > 3级物品 > 5级物品 > Apple >芒果 >其他 >特别项目 
并在stackoverflow中找到此查询以进行自然排序 
SELECT * FROM category WHERE cat_name LIKE 'Level%' ORDER BY LEFT(cat_name,LOCATE(' ',cat_name)),CAST(SUBSTRING(cat_name,cat_name)+1) AS SIGNED),cat_name ASC
 
但我不知道如何将它与我的第一个查询集成.我能得到的最接近的是 
SELECT * FROM category ORDER BY LEFT(cat_name,(CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END) ASC,cat_name ASC
 
但是Levels的字符串是关闭的.它按数字排列,但不占据最高位置. 
> Apple >芒果 >其他 > 1级物品 > 2级项目 > 3级物品 > 5级物品 > 10级物品 > 12级物品 > 22级物品 >特别项目 
我想我在这里错过了一些东西.希望可以有人帮帮我.提前致谢! 
sqlfiddle:http://sqlfiddle.com/#!2/5a3eb/2
最佳答案
试试: 
SELECT * FROM category 
ORDER BY (CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END)ASC,LEFT(cat_name,cat_name ASC
 
它与ORDER BY中的语句顺序有关
                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |