从ENUM列获取数值,可以使用
mysql> SELECT enum_col+0 FROM tbl_name;
但在我的mysql5.5控制台中,此查询返回:
1.0000000000000000000000000000000
我想得到一个整数1
我知道我可以使用:
SELECT CONVERT(enum_col,UNSIGNED) FROM tbl_name;
或
SELECT CAST(enum_col AS UNSIGNED) FROM tbl_name;
我想知道为什么enum_col+0
返回一个浮点数,
以及从ENUM列获取数值的任何其他方法吗?
答案 0 :(得分:1)
看一下这篇文章 - Type Conversion in Expression Evaluation;它描述了MySQL如何在不同类型之间进行转换;有一些规则,在您的情况下,您将结果作为浮点值。
...并尝试另一种变体:
SELECT TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM TRIM(LEADING 'enum' FROM column_type))) INTO @enum
FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tbl_name' AND COLUMN_NAME = 'enum_col';
SELECT FIND_IN_SET(CONCAT('''', enum_col, ''''), @enum) FROM tbl_name
或者这个:
SELECT REPLACE(TRIM(TRAILING ')' FROM TRIM(LEADING '(' FROM TRIM(LEADING 'enum' FROM column_type))), '''', '') INTO @enum
FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'tbl_name' AND COLUMN_NAME = 'enum_col';
SELECT FIND_IN_SET(enum_col, @enum) FROM tbl_name