【发布时间】:2015-09-25 06:31:40
【问题描述】:
例如,即使 SELECT 查询本身返回值 30.00,以下函数也始终返回 ELSE 值(即 6)。在这种情况下,该函数应返回数字 4。有人可以帮我吗?
DELIMITER $$
CREATE FUNCTION znamka(id_testu INT, id_studenta INT)
RETURNS TINYINT
BEGIN
DECLARE percenta FLOAT;
SET percenta=
(
SELECT ROUND(tv.pocet_bodov/t.max_body*100, 2)
FROM test t JOIN test_vysledky tv ON (tv.fk_test=t.id_test)
WHERE tv.fk_test=id_testu AND tv.fk_student=id_studenta
);
RETURN CASE
WHEN percenta>=90 THEN 1
WHEN percenta<90 >=75 THEN 2
WHEN percenta<75 >=50 THEN 3
WHEN percenta<50 >=30 THEN 4
WHEN percenta<30 THEN 5
ELSE 6
END;
END;
$$
DELIMITER ;
【问题讨论】:
-
"WHEN percenta=75 THEN 2" 等是无效的语法。尝试“WHEN percenta 在 75 和 89.9999 THEN 2 之间”等,或“WHEN percenta =75 THEN 2”。
-
将浮点数转换为 int 然后检查。