mysql order varchar字段为整数

mysql order varchar字段为整数,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我的表中有一个varchar字段,我想对它进行排序。但我需要将这个字段作为整数处理。意思是如果排序为文本,顺序是“19,2,20”,但我想得到正确的顺序“2,19,20” 有人能帮我吗?不知何故,我没有用CAST运行查询。我总是得到错误代码:1064接近“DECIMAL”(或我选择的其他数字类型)。因此,我找到了另一种将varchar排序为数字的方法: SELECT * FROM mytable ORDER BY CAST(mycol AS DECIMAL) SELEC

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


有人能帮我吗?

不知何故,我没有用
CAST
运行查询。我总是得到
错误代码:1064接近“DECIMAL”
(或我选择的其他数字类型)。因此,我找到了另一种将
varchar
排序为数字的方法:

SELECT  *
FROM    mytable
ORDER BY
        CAST(mycol AS DECIMAL)
SELECT *
FROM mytable
ORDER BY ABS(mycol)

稍微简单一点,在我的例子中可以使用。

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

SELECT * FROM mytable ORDER BY ABS(mycol)
这是解决办法

SELECT * FROM MyTable ORDER BY ABS(MyCol);
为此,您可以
ABS()
。ABS()是一个数学函数,它返回指定表达式的
绝对(正值)
。所以查询将是这样的

SELECT * FROM MyTable ORDER BY ABS(MyCol);

所有其他答案都使用
ABS
,它将值转换为绝对(正)值,假设整数为正。更好的解决方案是使用
*1

选择*
从mytable
按mycol订购*1


这是为了防止将负数转换成正数。灵感来源:

@Quassnoi:我只是想知道,但是mycol+0的施法是否比ORDER更有效
@dnagirl
DECIMAL
将自动截断
[0-9]
范围以外的所有内容,
mycol+0
(这意味着
施法为双精度
)将发出警告。至于表现,我认为他们是一样的。阿比·贝克特-演员阵容和开场白之间不能有空隙