在MySQL存储函数中的字符上使用Case语句
我正在尝试编写一个存储函数,它接受在MySQL存储函数中的字符上使用Case语句,mysql,sql,case,stored-functions,Mysql,Sql,Case,Stored Functions,我正在尝试编写一个存储函数,它接受CHAR(3)(缩写)中的值,对其应用大小写,并将其转换为另一个字符串。我的表架构如下所示: CREATE TABLE roster ( id VARCHAR(9) PRIMARY KEY, class_level CHAR(2) ); 以及尝试写入存储函数: DELIMITER $$ CREATE FUNCTION classlevel (level CHAR(2)) RETURNS TINYTEXT DETERMINISTIC
CHAR(3)
(缩写)中的值,对其应用大小写
,并将其转换为另一个字符串。我的表架构如下所示:
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
s,因此我不知道为什么这些字符串被解释为DOUBLE
首先,您的大小写表达式可能如下
CASE (level)
WHEN "SR" THEN "Senior"
WHEN "JR" THEN "Junior"
WHEN "SO" THEN "Sophomore"
WHEN "FR" THEN "Freshman"
ELSE "Unknown"
END;
因为,您没有为case
定义任何表达式或列,仅此而已!谢谢这似乎是个坏主意。您应该改用引用表。