SQL排序字符串,首先是数字特定模式

bim*_*rez 6 mysql sql case sql-order-by

我有一个具有列(cat_name)的表.有些是字符串后跟数字,其他字符串只是普通字符串.我喜欢通过首先将所有字符串以'Level'开头来安排它.

期望的输出:

  • 1级物品
  • 2级物品
  • 3级项目
  • 5级物品
  • 10级物品
  • 12级物品
  • 22级物品
  • 苹果
  • 芒果
  • 其他
  • 特殊物品

我用过这个查询

SELECT * FROM category ORDER BY
(CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END) ASC, cat_name
Run Code Online (Sandbox Code Playgroud)

得到了

  • 1级物品
  • 10级物品
  • 12级物品
  • 2级物品
  • 22级物品
  • 3级项目
  • 5级物品
  • 苹果
  • 芒果
  • 其他
  • 特殊物品

并在stackoverflow中找到此查询以进行自然排序

SELECT * FROM category WHERE cat_name LIKE 'Level%' ORDER BY LEFT(cat_name,LOCATE(' ',cat_name)), CAST(SUBSTRING(cat_name,LOCATE(' ',cat_name)+1) AS SIGNED), cat_name ASC
Run Code Online (Sandbox Code Playgroud)

但我不知道如何将它与我的第一个查询集成.我能得到的最接近的是

SELECT * FROM category ORDER BY LEFT(cat_name,LOCATE(' ',cat_name)), CAST(SUBSTRING(cat_name,LOCATE(' ',cat_name)+1) AS SIGNED),
(CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END) ASC, cat_name ASC
Run Code Online (Sandbox Code Playgroud)

但是Levels的字符串是关闭的.它按数字排列,但不占据最高位置.

  • 苹果
  • 芒果
  • 其他
  • 1级物品
  • 2级物品
  • 3级项目
  • 5级物品
  • 10级物品
  • 12级物品
  • 22级物品
  • 特殊物品

我想我在这里错过了一些东西.希望可以有人帮帮我.提前致谢!

sqlfiddle:http://sqlfiddle.com/#!2/5a3eb/2

Mil*_*len 2

尝试使用:

SELECT * FROM category 
ORDER BY (CASE WHEN cat_name LIKE 'Level%' THEN 0
ELSE 1
END)ASC,
LEFT(cat_name,LOCATE(' ',cat_name)), CAST(SUBSTRING(cat_name,LOCATE(' ',cat_name)+1) AS SIGNED),
  cat_name ASC
Run Code Online (Sandbox Code Playgroud)

这与你的语句中的顺序有关ORDER BY