gpt4 book ai didi

MYSQL - ORDER BY 带括号的数字列

转载 作者:行者123 更新时间:2023-11-29 06:31:43 24 4
gpt4 key购买 nike

我有一个包含书籍列表的旧数据库。每本书都有卷号。这些卷可以是第 1 部分和第 2 部分。所以,我有这些卷号的书:

1
2
3
...
29 (1)
29 (2)
30 (1)
30 (2)

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

SELECT * FROM volumenes ORDER BY volumen_numero * 1 DESC

在达到 30 之前,它一直非常好!出于某种原因,它现在返回:

30 (1)
30 (2)
29 (2)
29 (1)
... all sorted correctly from this point on

我尝试从列值中替换括号,如下所示:

ORDER BY CAST(replace(replace(volumen_numero,")",""), "(", "") as unsigned)

但我得到了完全相同的结果。

我要找的是这个订单:

30 (2)
30 (1)
29 (2)
29 (1)
...

Here you have a working SQL Fiddle

最佳答案

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

order by substring_index(volumen_numero, ' ', 1) + 0,
substring_index(volumen_numero, ' ', -1)

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

order by substring_index(volumen_numero, ' ', 1) + 0,
length(substring_index(volumen_numero, ' ', -1)),
substring_index(volumen_numero, ' ', -1)

或者,如果您更喜欢隐晦和简短:

order by volumen_numero + 0,
substring_index(volumen_numero, '(', -1) + 0

关于MYSQL - ORDER BY 带括号的数字列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27556361/

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