gpt4 book ai didi

mysql - 根据mysql数据库中的特定顺序对行顺序进行排序

转载 作者:可可西里 更新时间:2023-11-01 08:17:39 24 4
gpt4 key购买 nike

我在mysql数据库中存储了一些值,它按照这个顺序存储这些值。当我取回我的结果时,这个命令真的帮助了我......

1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
2
3.1.1
3.1.2
4
4.1
4.2
4.3
4.3.1

在我添加像 10、11、12、13 这样的值之前,这非常有效。添加它们时,它们会像这样放置。

1
1.1
1.1.1
1.1.2
1.2
1.2.1
1.2.2
11
12
13
14
2
3.1.1
3.1.2
4
4.1
4.2
4.3
4.3.1

我需要根据数据库中的第一个数值来放置它们。那样做是不可能的吗?如果是这样,是否有任何其他方法可用于完成我需要的事情?

最佳答案

只需将字符串转换为数字,按数字排序,然后按字符串排序:

SELECT col FROM t
ORDER BY col+0, col

| COL |
|-------|
| 1 |
| 1.1 |
| 1.1.1 |
| 1.1.2 |
| 1.2 |
| 1.2.1 |
| 1.2.2 |
| 2 |
| 3.1.1 |
| 3.1.2 |
| 4 |
| 4.1 |
| 4.2 |
| 4.3 |
| 4.3.1 |
| 10 |
| 11 |
| 12 |
| 13 |

fiddle here .

我提供的解决方案只会根据每个字符串的第一个数值 进行排序。其余的将被视为一个字符串。您可以解析其余的字符串值并根据该结果进行排序,但这将非常低效。

解决此问题的正确方法是,如果您希望分别对 3 个数值进行排序,则创建 3 个数字列。 不要使用字符串对数值进行排序。这样,'2.10' 等值将变为 2100 并且排序将执行者

ORDER BY col1, col2, col3

如果你想选择由点分隔的那三个数字,那么你可以使用:

SELECT CONCAT_WS('.', col1, col2, col3) FROM t
ORDER BY col1, col2, col3

fiddle here .

关于mysql - 根据mysql数据库中的特定顺序对行顺序进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308515/

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