2012-01-16 25 views
1

我已经存储在字符串中,现在我想找回它们以降序作为数据库表格一些数量的数据作为数字的号码来查询订单从数据库的数字我可以做到这一点,我如何才能做到这一点是否有可能通过对存储为字符串中的数据库获得降序排列

select * from article order by numbers DESC 

它导致数量为

90 
89 
88 
1000 
10 
1 
+4

并将其作为数字数据类型不是字符串数据类型? – gbn 2012-01-16 13:41:34

回答

1

您不必逐一选择的这种,你只需要指定ORDER BY部分为数字。

SELECT * FROM article ORDER BY CAST(numbers AS SIGNED) DESC; 
-1
select * from article order by numbers DESC 

顺序有2个选项:DESC(结尾)和ASC(结束)(ASC是默认的)。

+0

该问题询问将字符串转换为数字。他原来的职位已经有DESC了。 – Travesty3 2012-01-16 13:44:48

+0

他现在,他没有之前;-)。另外,对包含数字和数字的字符串进行排序应该会得到相同的结果。 – JNDPNT 2012-01-16 13:45:21

+0

它没有。正如OP所述,它将数字排序为字符串,而不是数字。当按照降序排列字符串时,90会在100之前(因为比较第一个字符,比如字符串排序,9> 1)。这就是为什么你必须把它们作为数字。 – Travesty3 2012-01-16 14:16:29

0

您需要指定确切的列,以便在您需要转换SQL可以使用CAST()功能。

SELECT CAST(numbers AS INT) FROM article ORDER BY numbers DESC 

这将以正确的顺序而不是按字母排序返回数字。

0

我假设你用“String”表示“VARCHAR”。使用INT并将数字存储为数字将为您节省很多麻烦。

如果实在无法避免存储这些数字,这样,你总是可以用零到一定规模,使他们以正确的顺序返回垫它们。

2

您正在将数字存储为varchar。不是数字。他们正在按字符串排序

SELECT numbers 
FROM article 
ORDER BY CAST(numbers AS INT) DESC; 

如果它们是数字,则将它们存储为这样。您也将无法使用索引优化,因为CAST

相关问题