在MySQL存储函数中对CHAR使用Case语句

时间:2018-04-21 04:35:35

标签: mysql sql case stored-functions

我正在尝试编写一个存储函数,该函数接受CHAR(3)(首字母缩略词)中的值,对其应用CASE,并将其转换为另一个字符串。我的表架构如下所示:

CREATE TABLE roster (
    id VARCHAR(9) PRIMARY KEY,
    class_level CHAR(2)
);

并尝试编写存储的函数:

DELIMITER $$
CREATE FUNCTION classlevel (level CHAR(2))
    RETURNS TINYTEXT DETERMINISTIC
    BEGIN
    DECLARE `result` TINYTEXT;
    SET `result` = "";
    SET `result` =
        CASE
            WHEN "SR" THEN "Senior"
            WHEN "JR" THEN "Junior"
            WHEN "SO" THEN "Sophomore"
            WHEN "FR" THEN "Freshman"
            ELSE "Unknown"
        END;
    RETURN `result`;
    END$$

当我尝试在我的桌子上执行该功能时,我收到一个错误:

mysql> select classlevel(class_level) from extended_roster;
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'SR'

我的架构中没有DOUBLE,因此我不知道为什么这些字符串被解释为DOUBLE

1 个答案:

答案 0 :(得分:0)

首先,您的case表达式可能如下

CASE (level)
     WHEN "SR" THEN "Senior"
     WHEN "JR" THEN "Junior"
     WHEN "SO" THEN "Sophomore"
     WHEN "FR" THEN "Freshman"
     ELSE "Unknown"
END;

因为,您还没有为case

定义任何表达式