我的行中有以下值(它们应该像这样排序);
**CLASS_CODE**
6A
6B
6C
10A
10B
10C
如果我做一个简单的ORDER BY CLASS_CODE
,我将获得前10倍和6倍的值。
所以我使用ORDER BY (CLASS_CODE+0)
,这会对它们进行正确排序,以便6x首先出现,但它也没有按顺序对它们进行排序。
订购的正确方法是什么,所以我可以得到如上所示的正确订单?
答案 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)