2009-10-26 76 views
26

我的表中有一个varchar字段,我想对它进行排序。但我需要处理这个字段为整数。意思是如果排序为文本,顺序是“19,2,20”,但我想要得到正确的顺序“2,19,20”。mysql order varchar field as integer

任何人都可以帮助我吗?

回答

17
SELECT * 
FROM mytable 
ORDER BY 
     CAST(mycol AS DECIMAL) 
+0

感谢Quassnoi – ntan 2009-10-26 14:35:34

+0

@Quassnoi:只是想知道,但比ORDER BY mycol是铸造更高效+ 0 – dnagirl 2009-10-26 14:40:09

+0

不错的主意我试驾它 – ntan 2009-10-26 14:42:26

40

我以某种方式没有设法运行查询CAST。我总是得到Error Code: 1064 near "DECIMAL"(或我选择的其他数字类型)。于是,我找到了另一种方式来排序varchar的数字:

SELECT * 
FROM mytable 
ORDER BY ABS(mycol) 

简单一点,在我的情况下工作。

2

可使用此代码根据订购varchar字段你需要

SELECT * FROM mytable ORDER BY ABS(mycol) 
14

下面是解

SELECT * FROM MyTable ORDER BY ABS(MyCol); 
5

您可以ABS()用于这一目的。 ABS()是一个数学函数,返回absolute (positive) value of the specified expression。所以查询将是这样的

SELECT * FROM MyTable ORDER BY ABS(MyCol); 
6

所有其他的答案使用ABS,其值转换成绝对(正)值,假设整数是积极的。一个更好的解决办法是使用* 1

SELECT * FROM mytable ORDER BY mycol * 1

这防止铸造负数为积极因素。启发:mysql sort string number