You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL函数中CASE条件使用异常:调用SELECT bil(4)返回Neutral而非Positive

MySQL函数中CASE语句的错误修正

你的CASE语句语法使用错误,导致逻辑判断失效:

  • 你用了简单CASE表达式(CASE num ...),这种写法会把num和每个WHEN后面的值做相等比较,而不是判断条件真假。
  • 比如当num=4时,num>0的结果是布尔值1,MySQL会判断4=1,显然不成立;num<0的结果是0,4=0也不成立,所以所有分支都不匹配,最终走ELSE返回Neutral。

正确写法一:使用搜索CASE表达式(推荐)

去掉CASE后面的num,直接在WHEN后写条件判断:

DELIMITER $$

USE `db_sp`$$

DROP FUNCTION IF EXISTS `bil`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `bil`(num INT) RETURNS VARCHAR(7) CHARSET latin1
BEGIN
    DECLARE result VARCHAR(7);
    CASE
    WHEN num > 0 THEN
        SET result = 'Positive';
    WHEN num < 0 THEN
        SET result = 'Negative';
    ELSE 
        SET result = 'Neutral';
    END CASE;
    RETURN result;
END$$

DELIMITER ;

正确写法二:利用SIGN函数配合简单CASE

通过SIGN(num)返回的结果(正数返回1,负数返回-1,0返回0)来匹配:

DELIMITER $$

USE `db_sp`$$

DROP FUNCTION IF EXISTS `bil`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `bil`(num INT) RETURNS VARCHAR(7) CHARSET latin1
BEGIN
    DECLARE result VARCHAR(7);
    CASE SIGN(num)
    WHEN 1 THEN
        SET result = 'Positive';
    WHEN -1 THEN
        SET result = 'Negative';
    ELSE 
        SET result = 'Neutral';
    END CASE;
    RETURN result;
END$$

DELIMITER ;

执行SELECT bil(4);会返回Positive,SELECT bil(-2);返回Negative,SELECT bil(0);返回Neutral,符合预期。

内容的提问来源于stack exchange,提问作者Kaze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:57:49