2

我有桌子

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

我怎么能做我想的。谢谢

4

5 回答 5

2

它是字符串排序,而不是数字排序

ASCII 明智,降序,在预期'9'之前。'20'这也可以被认为是'9 '(尾随空格)被比较'20'

字符串排序是按字符排序的。

于 2013-07-26T13:45:43.827 回答
1

使用SUBSTRING来抓取空格后的数字LOCATE,然后 doORDER BY应该在使用时起作用CAST

SELECT   *
FROM     example
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED) DESC
于 2013-07-26T13:58:10.560 回答
0
SELECT *
FROM `example`
ORDER BY CAST(name AS UNSIGNED)desc;

小提琴

于 2013-07-26T13:45:36.853 回答
0

它正在执行 alpha 排序,因为它是一个字符串。

示例 2 在示例 1000 之后。

一些选项您可以将其拆分为两个字段名称和数字您可以使用字符串函数将其拆分为排序您可以添加前导零示例 0002 在示例 1000 之前。

于 2013-07-26T13:49:36.450 回答
-1

您按名称订购,这将产生一个字母顺序。尝试

    ORDER BY id desc;
于 2013-07-26T13:47:06.490 回答