加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-03-15 05:04:12 所属栏目:MySql教程 来源:网络整理
导读:我有一个具有列(cat_name)的表.有些是字符串后跟数字,其他字符串只是普通字符串.我喜欢通过首先将所有字符串以Level开头来安排它. 期望的输出: 1级物品 2级项目 3级物品 5级物品 10级物品 12级物品 22级物品 Apple 芒果 其他 特别项目 我用过这个查询 SELEC

我有一个具有列(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中的语句顺序有关

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!