如何检查值是否在MySQL枚举中?

时间:2013-06-19 19:16:34

标签: mysql sql

如果提供的参数位于selecttrue,我正在尝试编写enum false的存储过程。这是我目前的尝试:

DROP PROCEDURE IF EXISTS is_type_of_fruit;

delimiter //
CREATE PROCEDURE is_type_of_fruit (fruit VARCHAR(20))
BEGIN
  DECLARE fruit_types ENUM('APPLE','GRAPE','ORANGE');
  SELECT fruit IN(fruit_types);
END//

CALL is_type_of_fruit('APPLE');

我似乎无法使用标准IN语法来检查项目是否在选项列表中。我需要为ENUM类型使用不同的策略吗?

1 个答案:

答案 0 :(得分:1)

遇到这个非常古老的问题试图做同样的事情。可能对原始海报没有太多用处,但已为下一个人添加了这个答案。

DELIMITER //

DROP PROCEDURE IF EXISTS is_type_of_fruit //
CREATE PROCEDURE is_type_of_fruit (fruit VARCHAR(20))
BEGIN
  DECLARE fruit_types ENUM('APPLE','GRAPE','ORANGE');

  SET fruit_types = fruit;

  SELECT IF(fruit_types = fruit, TRUE, FALSE);
END//

DELIMITER ;

mysql> call is_type_of_fruit('cabbage');
+--------------------------------------+
| IF(fruit_types = fruit, TRUE, FALSE) |
+--------------------------------------+
|                                    0 |
+--------------------------------------+
1 row in set (0.00 sec)

mysql> call is_type_of_fruit('orange');
+--------------------------------------+
| IF(fruit_types = fruit, TRUE, FALSE) |
+--------------------------------------+
|                                    1 |
+--------------------------------------+
1 row in set (0.00 sec)

应该提一下,这种方法不是严格模式友好的,所以如果你想使用它,你必须自己捕捉到这个错误。