在MySQL中按混合字母数字列排序

时间:2011-11-25 08:55:40

标签: mysql sql sql-order-by

我的行中有以下值(它们应该像这样排序);

**CLASS_CODE**
6A
6B
6C
10A
10B
10C

如果我做一个简单的ORDER BY CLASS_CODE,我将获得前10倍和6倍的值。

所以我使用ORDER BY (CLASS_CODE+0),这会对它们进行正确排序,以便6x首先出现,但它也没有按顺序对它们进行排序。

订购的正确方法是什么,所以我可以得到如上所示的正确订单?

4 个答案:

答案 0 :(得分:3)

这里有一些内容:http://www.carlos-roque.com/2011/04/19/sorting-characters-and-numbers-in-mysql/

我现在无法测试它,但我相信这样的东西可能是一个不错的黑客:

SELECT CLASS_CODE as hack ... ORDER BY (CLASS_CODE+0)ASC, hack ASC

也许试着扭转它。

如果这是一个失败,这里有一些关于以自然方式排序的讨论:Natural Sort in MySQL

答案 1 :(得分:3)

只要您在字段值的末尾只使用一个字母,就可以使用以下内容:

ORDER BY (class_code+0), right(class_code, 1)

答案 2 :(得分:0)

很抱歉迟到的回复。但它可能会帮助某人。

您必须实施自然排序。要使用PHP对其进行排序,您可以使用natsort()函数。

你也可以通过MySQL实现自然分类,这很简单。例如:

ORDER BY LENGTH(class_code), class_code

答案 3 :(得分:0)

我有这个场景,我使用CAST功能。在这种情况下ORDER BY CAST(class_code AS DECIMAL)