MySQL为具有等效数字的值范围创建函数
Posted
技术标签:
【中文标题】MySQL为具有等效数字的值范围创建函数【英文标题】:MySQL create function for range of values with equivalent numbers 【发布时间】:2011-09-13 14:38:05 【问题描述】:这个函数有什么问题。这是我的预期输出是
1 = 10
2 to 3 = 7
4 to 10 = 5
11 to 30 = 2
31 to 100 = 1
DELIMITER $$
DROP FUNCTION IF EXISTS `computeScore`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `computeScore`(`POS` INT(11)) RETURNS int(11)
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE ordinal INT;
SELECT (
CASE
WHEN POS < 2 THEN 10
WHEN POS >= 2 < 4 THEN 7
WHEN POS >= 4 < 11 THEN 5
WHEN POS >= 11 < 31 THEN 2
ELSE 1
END )
INTO ordinal;
RETURN ordinal;
RETURN 0;
END;
$$
DELIMITER ;
输出:我总是得到 10
【问题讨论】:
添加了输出,我总是得到 10 【参考方案1】:试试这个:
SELECT (
CASE
WHEN POS < 2 THEN 10
WHEN POS >= 2 && POS < 4 THEN 7
WHEN POS >= 4 && POS < 11 THEN 5
WHEN POS >= 11 && POS < 31 THEN 2
ELSE 1
END )
【讨论】:
【参考方案2】:CASE
部分应该是
CASE
WHEN POS < 2 THEN 10
WHEN POS >= 2 AND POS < 4 THEN 7
WHEN POS >= 4 AND POS < 11 THEN 5
WHEN POS >= 11 AND POS < 31 THEN 2
ELSE 1
END
【讨论】:
【参考方案3】:怎么了?
来自关于SELECT..INTO statament 的参考 - 此 SELECT 语法将选定的列直接存储到变量中。因此,只能检索一行。
检查查询是否返回一条记录。
编辑:
代码可以是这样的-
SET ordinal = CASE
WHEN pos < 2 THEN 10
WHEN pos >= 2 AND pos < 4 THEN 7
WHEN pos >= 4 AND pos < 11 THEN 5
WHEN pos >= 11 AND pos < 31 THEN 2
ELSE 1
END;
【讨论】:
还有一排。没有使用 FROM。以上是关于MySQL为具有等效数字的值范围创建函数的主要内容,如果未能解决你的问题,请参考以下文章