首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -数字列的顺序(带括号)

MYSQL -数字列的顺序(带括号)
EN

Stack Overflow用户
提问于 2014-12-18 21:52:53
回答 2查看 168关注 0票数 1

我有一个旧数据库,里面有一张书的清单。每本书都有一个卷号。卷可以是第1部分和第2部分。因此,我有一些书的卷号:

代码语言:javascript
复制
1
2
3
...
29 (1)
29 (2)
30 (1)
30 (2)

我需要按DESC顺序选择所有卷,按卷号列排序。最初,我做了这个动态铸造:

代码语言:javascript
复制
SELECT * FROM volumenes ORDER BY volumen_numero * 1 DESC

一直工作到30岁!由于某种原因,它现在返回以下内容:

代码语言:javascript
复制
30 (1)
30 (2)
29 (2)
29 (1)
... all sorted correctly from this point on

我试图替换列值中的括号,如下所示:

代码语言:javascript
复制
ORDER BY CAST(replace(replace(volumen_numero,")",""), "(", "") as unsigned)

但我得到的结果完全一样。

我要找的是这个命令:

代码语言:javascript
复制
30 (2)
30 (1)
29 (2)
29 (1)
...

这里您有一个工作的SQL

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-18 21:57:47

问题是,您只是按第一个数字排序。下面是一个更明确的方法:

代码语言:javascript
复制
order by substring_index(volumen_numero, ' ', 1) + 0,
         substring_index(volumen_numero, ' ', -1)

只要卷号是一位数,上面的内容就能工作。您可以使用以下方法处理较长的卷号:

代码语言:javascript
复制
order by substring_index(volumen_numero, ' ', 1) + 0,
         length(substring_index(volumen_numero, ' ', -1)),
         substring_index(volumen_numero, ' ', -1)

或者,如果你更喜欢神秘和矮小:

代码语言:javascript
复制
order by volumen_numero + 0,
         substring_index(volumen_numero, '(', -1) + 0
票数 1
EN

Stack Overflow用户

发布于 2014-12-18 21:58:32

您应该在选择中调试发生的事情。(将order表达式添加到select并验证它。)

我想空间会干扰整数转换。(可能第二部分将被截断。)如果这个假设是正确的,那么您可以很容易地修复它:

代码语言:javascript
复制
ORDER BY CAST(replace(replace(replace(volumen_numero,")",""), "(", "")," ","") as unsigned)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27556361

复制
相关文章

相似问题

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