从ENUM列的问题中获取数值

时间:2012-02-29 06:50:04

标签: mysql

从ENUM列获取数值,可以使用

mysql> SELECT enum_col+0 FROM tbl_name;

reference here

但在我的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列获取数值的任何其他方法吗?

1 个答案:

答案 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