我有像
这样的表格CREATE TABLE IF NOT EXISTS example
(id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
primary key ( id ))
我从1 - >插入表20记录20喜欢
id | name
1 | example 0
2 | example 1
...
20 | example 19
我像
一样查询SELECT *
FROM `example`
ORDER BY `name` DESC
但结果是
id | name
10 | example 9
9 | example 8
...
1 | example 0
我认为那是
id | name
20 | example 19
19 | example 18
...
1 | example 0
我怎么做我的想法。感谢
答案 0 :(得分:2)
这是一个字符串排序,而不是数字排序
ASCII明智,降序,'9'
按预期在'20'
之前。这也可以被认为是'9 '
(尾随空格)与'20'
进行比较
字符串排序是字符性的。
答案 1 :(得分:1)
使用SUBSTRING
使用LOCATE
获取空格后的数字,然后使用ORDER BY
时CAST
应该有效。
SELECT *
FROM example
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED) DESC
答案 2 :(得分:0)
SELECT *
FROM `example`
ORDER BY CAST(name AS UNSIGNED)desc;
答案 3 :(得分:0)
它正在进行alpha排序,因为它是一个字符串。
实施例2在实施例1000之后。
一些选择 您可以将其拆分为两个字段名称和编号 您可以使用String函数进行大量混乱,将其拆分以进行排序 您可以添加前导零示例0002在示例1000之前。
答案 4 :(得分:-1)
您按名称排序,这将导致按字母顺序排列。尝试
ORDER BY id desc;