mysql自然排序

时间:2011-07-18 06:48:02

标签: mysql sorting

我的格式为示例编号:

1.1
1.1.4
1.1.5
2.1
2.1.10
2.1.23
3.1a
3.1b
4.1.5
4.2.6
4.7.12

如何在MySQL中对其进行排序?我可以从$ sort命令行选项轻松地做到这一点,但似乎没有任何东西在MySQL

中工作

3 个答案:

答案 0 :(得分:2)

尝试通过INET_ATON订购(适用于MySQL 3.23.15及更新版本)

ORDER BY INET_ATON(some_field);

PS。它适用于IP地址,不知道它是如何处理字母的

答案 1 :(得分:2)

如果您将字符串拆分成各个相关部分并按顺序排序,则可能会有效。

SELECT data
FROM example
ORDER BY
    CAST(SUBSTRING_INDEX(data, '.', 1) AS BINARY) ASC,
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data , '.', 2), '.', -1) AS BINARY) ASC,
    CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data , '.', -1), '.', 1) AS BINARY) ASC;

不能说我支持在MySQL中做类似的事情,但我想它会让你到达你需要的地方,至少我的测试数据。请记住,如果更改字符串中的元素数,则需要编辑该数字。

答案 2 :(得分:0)

ORDER BY出现了问题吗?

我试过了:

CREATE TABLE example (data VARCHAR(30));
INSERT INTO example VALUES ('4.2.6'), ('1.1.5'), ('2.1.10'), ('3.1b'), ('2.1'), ('4.7.12'), ('1.1'), ('2.1.23'), ('1.1.4'), ('3.1a'), ('4.1.5');
SELECT * FROM example ORDER BY data;

......它似乎像你一样工作。 (我不能保证没有一些角落的情况,你的真实数据可能不会被你认为是“自然的”排序。这似乎是一个启发式术语,而不是一个精确定义的艺术术语。