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
相关产品推荐
相关产品推荐

