ISSUE:Mysql将Enum转换为Int

时间:2011-07-23 22:12:07

标签: mysql enums int

我的数据库中有一个非常简单的评级系统,其中每个评级都存储为枚举('1',' - 1')。要计算我尝试使用此语句的总数:

SELECT SUM(CONVERT(rating, SIGNED)) as value from table WHERE _id = 1

这适用于正1,但由于某种原因,-1被解析为2。

任何人都可以提供帮助或提供煽动吗?

或者我应该放弃并将列更改为SIGNED INT(1)?

6 个答案:

答案 0 :(得分:16)

这就是你想要的

select enum+0 as enum

答案 1 :(得分:12)

只能在MySQL中int转换为enum

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1

答案 2 :(得分:4)

是的,我建议更改列的类型。当您阅读doc about enum type(强烈建议不要使用数字作为枚举值!)时,问题就变得清晰了 - 返回枚举项的索引,而不是枚举值本身。

答案 3 :(得分:0)

使用

SELECT SUM( IF( columnname >0, CAST( columnname AS CHAR ) , NULL ) ) AS vals
FROM `tableName` 

答案 4 :(得分:0)

好的,

只是有一点时间与这一个。我了解到我不应该使用整数是值的ENUM。但是我们有多年的数据,我无法改变数据库。

这个坏男孩工作(把它变成一个角色,然后变成一个签名的int)。

CAST(CAST(`rating` AS CHAR) AS SIGNED) as value from table WHERE _id = 1

答案 5 :(得分:0)

我也不会在这里使用枚举,但是在这种情况下仍然有可能获得所需的内容

创建表格:

CREATE TABLE test (
    _id INT PRIMARY KEY,
    rating ENUM('1', '-1')
);

填写表格:

INSERT INTO test VALUES(1, "1"), (2, "1"), (3, "-1"), (4, "-1"), (5, "-1");

对枚举执行数学运算会将其转换为索引,因此仅可以缩放结果值:

SELECT 
    SUM(3 - rating * 2)
FROM
    test;

结果:-1对测试用例是正确的。