存储在varchar字段中的整数值在排序时给出不同的结果

时间:2011-10-21 10:45:14

标签: mysql select sql-order-by ascii max

我有一种情况,我有一个列名c_id,它在varchar中,但包含整数或空值。 (我无法更改数据类型,因为在我的项目中很长时间都使用了这个数据类型)

我的问题是,每当我尝试通过我的表格对该列进行排序时,它会向我显示已损坏的结果,即使我搜索最大值,也不会根据其大小给出最大值。

我想知道它是否在内部以ASCII格式存储,但我不太确定。 PLease帮助我知道这是为什么会发生这种情况。

感谢。

2 个答案:

答案 0 :(得分:5)

尝试使用CAST功能:

SELECT CAST(c_id AS UNSIGNED INTEGER) id, field1, field2 
FROM your_table
ORDER BY id

SELECT 
    CASE 
        WHEN c_id IS NULL THEN 0;
        ELSE CAST(c_id AS UNSIGNED INTEGER);
    END AS id
    , field1, field2 
FROM your_table
ORDER BY id

答案 1 :(得分:1)

您可以使用CAST功能。下面是一些代码,向您展示一个示例以及它在返回的结果中的区别:

mysql> SELECT CAST('19.45' AS DECIMAL(5,2)) as result;

+--------+
| result |
+--------+
| 19.45 |
+--------+

1 row in set (0.04 sec)
相关问题