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

标签 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

最佳答案

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

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

因为,您没有为 case 定义任何表达式

关于mysql - 在 MySQL 存储函数中对 CHAR 使用 Case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49952391/

相关文章:

mysql - 创建mysql存储过程时出现1193错误

sql-server - SQL Server IIF 与 CASE

mysql - 使用 case 函数合并 2 个 SELECT 查询

php - 如何使用 php 在 select 中提取 select 的值?

php - 为什么可配置产品和简单产品之间的关系会存储两次?

php - SQL 查询显示过去 60+ 的行

sql - 为什么 Postgres 说列不存在?

mysql - 将 CASE WHEN 与 GROUP BY 一起使用

PHP 使用 PDO 将图像上传到 mysql 数据库?

php - 相同的查询,不同的结果。 WordPress 排序