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

标签 mysql sql

我正在尝试编写一个存储过程,如果提供的参数在 enumfalse 中,它将选择 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/

相关文章:

mysql - 在 SQL 中连接两个字段

php - 这个 mysql_result 语句的 mysqli 等效项是什么?

php - 从数据库中删除 php 数组中不存在的数据

mysql - 如何减少基于非键列的重复行插入?

MySql:在记录不存在的情况下两次连接同一个表

sql - Oracle 中带有 CASE 语句的条件 WHERE 子句

sql - 匿名 PL/SQL block 与 native SQL 的性能

mysql - DELETE FROM X WHERE IN (..) 不删除行

mysql - 无 ID 查询的 SQL Update 语句 Take ID

sql - SQLite3中使用除法的计算字段