【问题标题】:MySQL: Error Code: 1292. Truncated incorrect DOUBLE valueMySQL:错误代码:1292。截断不正确的 DOUBLE 值
【发布时间】:2019-10-19 10:58:38
【问题描述】:

我正在尝试创建一个存储函数,该函数测试数据库中是否存在多个事物,如果至少存在一个,则返回布尔语句 false,如果不存在则返回 true。

具体来说,我要加入多张桌子,即:BurgerOrder、Patties、Buns。

BurgerOrder 表包含 PattyID(汉堡中的肉)和 BunID(面包类型)。请注意,一个汉堡可以有 2 个肉饼。这是我尝试过的。

DELIMITER //

CREATE FUNCTION PattyTest(BunCode INT)
RETURNS VARCHAR(5) DETERMINISTIC

BEGIN 
    DECLARE Result VARCHAR(5);

    IF BunCode NOT IN (SELECT B.ID 
                        FROM BurgerOrder BO JOIN Patties P JOIN Buns B 
                        ON B.ID = BO.BunID AND P.ID = B.PattyID 
                        WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or 'Beef') 
                        THEN SET Result = TRUE;

    ELSE SET Result = FALSE;

    END IF;

    RETURN Result;

END //

DELIMITER ;

有几件事我不确定。它返回 VARCHAR(5) 因为我找不到布尔数据类型。它当前返回 1 或 0 作为真和假。

其次,我相信这个功能在我实际测试时似乎工作得很好,但有一个错误。

错误代码:1292。截断不正确的 DOUBLE 值:'Beef'

当牛肉、鸡肉或酸面包在我测试的任何特定汉堡订单中时,我希望函数返回 True。但我认为导致问题的原因是当我输入的汉堡里面有 2 个牛肉饼时。当我运行上述功能时,它工作正常。只有当我调用函数(例如 Select PattyTest(23))时才会显示错误代码 1292。

奇怪的是 SQL 显示了一次错误信息,然后继续正常工作并返回正确的结果。

非常感谢任何帮助!

【问题讨论】:

    标签: mysql stored-functions truncated mysql-error-1292


    【解决方案1】:

    你在 where 子句中漏掉了一个比较列

    改用这个

    DELIMITER //
    
    CREATE FUNCTION PattyTest(BunCode INT)
    RETURNS VARCHAR(5) DETERMINISTIC
    
    BEGIN 
        DECLARE Result VARCHAR(5);
    
    IF BunCode NOT IN (SELECT B.ID 
                        FROM BurgerOrder BO JOIN Patties P JOIN Buns B 
                        ON B.ID = BO.BunID AND P.ID = B.PattyID 
                        WHERE B.Type = 'sourdough' OR P.Type = 'Grilled Chicken' or P.Type = 'Beef') 
                        THEN SET Result = TRUE;
    
    ELSE SET Result = FALSE;
    
    END IF;
    
    RETURN Result;
    
    END //
    
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      此消息表示您正在尝试在 WHERE 或 ON 子句中比较数字和字符串,要么确保它们具有相似的声明,要么使用显式 CAST 将数字转换为字符串。

      【讨论】:

        【解决方案3】:

        我猜 WHERE 子句 P.Type = 'Grilled Chicken' 或 'Beef' 中存在问题 使用多个 OR 子句 DB 引擎尝试将“牛肉”评估为单独的条件

        改成

        WHERE B.Type = 'sourdough' OR P.Type in ('Grilled Chicken' or 'Beef')

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-26
          • 2013-04-11
          • 2014-12-31
          • 2020-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          相关资源
          最近更新 更多