如何将set / Enum中的值转换为整数mysql

时间:2015-08-17 15:02:18

标签: mysql database

我有一个包含此表的数据库(评级)..

+---------+-------------+----------+------+------------+
| rate_id | reviewer_id | movie_id | rate | date1      |
+---------+-------------+----------+------+------------+
|       1 |         201 |      101 | 2    | 2011-01-22 |
|       2 |         201 |      101 | 4    | 2011-01-27 |
|       3 |         202 |      106 | 4    | NULL       |
|       4 |         203 |      103 | 2    | 2011-01-20 |
|       5 |         203 |      108 | 4    | 2011-01-12 |
|       6 |         203 |      108 | 2    | 2011-01-30 |
|       7 |         204 |      101 | 3    | 2011-01-09 |
|       8 |         205 |      103 | 3    | 2011-01-27 |
|       9 |         205 |      104 | 2    | 2011-01-22 |
|      10 |         205 |      108 | 4    | NULL       |
|      11 |         206 |      107 | 3    | 2011-01-15 |
|      12 |         206 |      106 | 5    | 2011-01-19 |
|      13 |         207 |      107 | 5    | 2011-01-20 |
|      14 |         208 |      104 | 3    | 2011-01-02 |
+---------+-------------+----------+------+------------+

费率是具有这些值的集合 (' 1'&#39 2'&#39 3'' 4'&#39 5&#39)。我想将此设置值转换为整数。我使用了cast(速率为无符号)。然后我使用了这个查询.. SELECT rate,cast(rate AS UNSIGNED)FROM rating;

它给了我这张表

的MySQL>选择率,演员表(率为无符号)FROM评级;

+------+------------------------+
| rate | cast(rate as unsigned) |
+------+------------------------+
| 2    |                      2 |
| 4    |                      8 |
| 4    |                      8 |
| 2    |                      2 |
| 4    |                      8 |
| 2    |                      2 |
| 3    |                      4 |
| 3    |                      4 |
| 2    |                      2 |
| 4    |                      8 |
| 3    |                      4 |
| 5    |                     16 |
| 5    |                     16 |
| 3    |                      4 |
+------+------------------------+

它看起来像二进制值..plz帮助我将其转换为正确的整数值..

3 个答案:

答案 0 :(得分:0)

您应该尝试以下方式。

结果的类型可以是以下值之一:

  • BINARY [(N)]
  • CHAR [(N)]
  • DATE
  • DATETIME
  • DECIMAL [(M [,d)]
  • 签名[INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

感谢。

答案 1 :(得分:0)

试试这个..

  
    

CAST(CAST(费率AS char)AS UNSIGNED);
     它有效..

  

答案 2 :(得分:0)

ENUM不是数值的好选择。您可以使用TYNYINT和过滤值,而不是使用ENUM,只接受代码中的[1-5]

MYSQL文件明确提到

  

我们强烈建议您不要将数字用作枚举值,因为它不会通过适当的TINYINT或SMALLINT类型保存在存储上,并且很容易混淆字符串和基础数字值(可能不是如果你不正确地引用ENUM值。如果确实使用数字作为枚举值,请始终将其括在引号中。如果省略引号,则将该数字视为索引。请参阅枚举文字的处理,以查看引用的数字是否可能被错误地用作数字索引值。

检查出来:MYSQL DOC Enumeration Limitations

:)