ORDER BY在数字前对字符进行排序

时间:2012-07-11 13:35:16

标签: mysql

我的问题是,MySQL在数字之前命令字符。举一个简单的例子,我们在数据库中有这个字符串:

3, a, 2, 1, b

ORDER BY语句将返回:

a, b, 1, 2, 3

但我希望它是:

1, 2, 3, a, b

我的数据库是utf8_unicode_ci,但这没有帮助。它仍然会产生错误的结果。 (我不能只检查它们是否是数字,然后将它们排序到顶部,因为一个项目也可以命名为“2something”,并且必须在“asomething”之前)。有什么想法吗?

编辑:我发现了问题。在数据库(存储用户)中,我按CONCAT(name, login)排序,名称为NULL。 MySQL总是在顶部命令NULL,因此字符位于数字的顶部(它们的名称字段是空字符串)。

4 个答案:

答案 0 :(得分:1)

如果列类型为ORDER BYcharacter

varchar应以所需方式运行。

答案 1 :(得分:1)

您需要将排序规则应用于排序字段

尝试

SELECT yourfield
FROM yourtable
ORDER BY yourfield COLLATE latin1_general_ci

答案 2 :(得分:0)

这样做:

SELECT id FROM example ORDER BY IF(id REGEXP '[0-9]+',id,CONCAT('0',id) )

这将在字母前添加'0'并按顺序排序。将返回原始列

答案 3 :(得分:0)

您可以在cast子句中尝试order by并检查结果吗?

order by cast( desired_field as char )