首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带前缀的MySQL排序数

带前缀的MySQL排序数
EN

Stack Overflow用户
提问于 2017-11-21 07:31:49
回答 2查看 113关注 0票数 1

我在数据库中有一个名为"mark“的字段,它包含以下数据:

代码语言:javascript
运行
复制
P-9
R-12
R-10
P-10
P-11
R-11
R-9
R-8
P-12
P-8
...

前缀可以在数字之前最多4个字符。

预期产出:

代码语言:javascript
运行
复制
P-8
P-9
P-10
P-11
P-12
R-8
R-9
R-10
R-11
R-12
....

到目前为止,我已经:

代码语言:javascript
运行
复制
ORDER BY CAST(mark AS UNSIGNED), mark ASC

这在看来几乎是正确的,但是它没有对低于10的数字进行正确排序。

EN

回答 2

Stack Overflow用户

发布于 2017-11-21 07:40:20

用这个,

代码语言:javascript
运行
复制
order by substring(mark,1,locate('-',mark)+1), cast(substring(mark,locate('-',mark)+1) as unsigned) asc
票数 0
EN

Stack Overflow用户

发布于 2017-11-21 07:40:51

我的SUBSTRING(code,LOCATE('-',code)+1)变体

代码语言:javascript
运行
复制
CREATE TABLE Test(
  code varchar(10)
);

INSERT Test VALUES
('PPP-9'),
('RR-12'),
('RRRR-10'),
('P-10'),
('P-11'),
('R-11'),
('R-9'),
('R-8'),
('P-12'),
('P-8');

SELECT
  *,
  CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED) NUM,
  LEFT(code,LOCATE('-',code)-1) PREFIX
FROM Test
ORDER BY
  CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED),
  LEFT(code,LOCATE('-',code)-1)

代码语言:javascript
运行
复制
...
ORDER BY
  LEFT(code,LOCATE('-',code)-1),
  CAST(SUBSTRING(code,LOCATE('-',code)+1) AS UNSIGNED)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47407562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档