-1

我的问题是,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

4 回答 4

1

ORDER BY如果列类型是character或,则应该以所需的方式工作varchar

于 2012-07-11T13:36:18.797 回答
1

您需要对排序字段应用排序规则

尝试

SELECT yourfield
FROM yourtable
ORDER BY yourfield COLLATE latin1_general_ci
于 2012-07-11T15:22:39.467 回答
0

做这个:

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

这将在字母前添加“0”并按其排序。将返回原始列

于 2012-07-11T13:48:47.663 回答
0

您可以尝试castinorder by子句并检查结果吗?

order by cast( desired_field as char )
于 2012-07-11T14:12:04.277 回答