gpt4 book ai didi

mysql - SQL首先用数字某种模式对字符串进行排序

转载 作者:可可西里 更新时间:2023-11-01 06:48:52 25 4
gpt4 key购买 nike

我有一个表,其中有一列 (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

得到

  • 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

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

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

但是带有 Levels 的字符串是关闭的。它是按数字排列的,但它们没有占据最前面的位置。

  • 苹果
  • 芒果
  • 其他
  • 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,LOCATE(' ',cat_name)), CAST(SUBSTRING(cat_name,LOCATE(' ',cat_name)+1) AS SIGNED),
cat_name ASC

这与你的ORDER BY

中语句的顺序有关

关于mysql - SQL首先用数字某种模式对字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20513894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com