问题:Mysql将Enum转换为Int

问题描述 投票:9回答:6

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

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

这对于正数1很好用,但是由于某种原因,-1被解析为2。

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

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

mysql enums int
6个回答
5
投票

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


19
投票

这就是您想要的

select enum+0 as enum

14
投票

仅可在MySQL中将int转换为enum

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

1
投票

好,

仅仅花了一点时间。我了解到我不应该使用ENUMs,其中整数是值。但是,我们有多年的数据价值,我无法更改数据库。

这个坏男孩工作了(将其转换为字符,然后转换为带符号的整数)。

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

0
投票

使用

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

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对于测试用例是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.