在 MySQL 存储函数中对 CHAR 使用 Case 语句
Using a Case Statement on CHARs in a MySQL Stored Function
我正在尝试编写一个存储函数,该函数采用 CHAR(3)
(首字母缩写词)中的值,对其应用 CASE
,并将其转换为另一个字符串。我的 table 架构如下所示:
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$$
当我尝试在 table 上执行函数时,出现错误:
mysql> select classlevel(class_level) from extended_roster;
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'SR'
我的架构中没有任何 DOUBLE
,所以我不知道为什么这些字符串被解释为 DOUBLE
。
首先,您的case
表达式可能如下
CASE (level)
WHEN "SR" THEN "Senior"
WHEN "JR" THEN "Junior"
WHEN "SO" THEN "Sophomore"
WHEN "FR" THEN "Freshman"
ELSE "Unknown"
END;
因为您没有为 case
定义任何 表达式 或 列
我正在尝试编写一个存储函数,该函数采用 CHAR(3)
(首字母缩写词)中的值,对其应用 CASE
,并将其转换为另一个字符串。我的 table 架构如下所示:
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$$
当我尝试在 table 上执行函数时,出现错误:
mysql> select classlevel(class_level) from extended_roster;
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'SR'
我的架构中没有任何 DOUBLE
,所以我不知道为什么这些字符串被解释为 DOUBLE
。
首先,您的case
表达式可能如下
CASE (level)
WHEN "SR" THEN "Senior"
WHEN "JR" THEN "Junior"
WHEN "SO" THEN "Sophomore"
WHEN "FR" THEN "Freshman"
ELSE "Unknown"
END;
因为您没有为 case