我的问题是,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
,因此字符位于数字的顶部(它们的名称字段是空字符串)。
答案 0 :(得分:1)
ORDER BY
或character
, 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 )