我正在尝试编写一个存储过程,如果提供的参数在 enum
和 false 中,它将
否则。这是我目前的尝试:选择
true
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
类型,我需要使用不同的策略吗?
最佳答案
试图做同样的事情时遇到了这个非常古老的问题。可能对原始海报没有太大用处,但已经为下一个人添加了这个答案。
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)
应该提到这个方法不是严格模式友好的,所以如果你想使用它,你必须自己捕获这个错误。
关于mysql - 如何检查值是否在 MySQL 枚举中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17199496/