MySQL:错误代码:1292。截断了错误的DOUBLE值

时间:2019-10-19 10:58:38

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

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

具体来说,我要加入多个表:BurgerOrder,Pattys,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),因为我找不到布尔数据类型。当前它返回1s或0s为true和false。

第二,我相信当我实际测试该功能时,它似乎工作正常,只有一个错误。

  

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

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

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

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您在where子句中错过了一个比较列

改为使用此

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning,calc}

\begin{document}
  \begin{tikzpicture}[box/.style={
      draw,thick,
    },
    label/.style={draw=none,midway,sloped,above,font=\small},
    myarrow/.style={->,thick} ,
    ]
    %poition upper and lower nodes
    \node[box] (gov) {Government};
    \node[box,below=4cm of gov,minimum width=3cm,dotted] (trans) {Transaction} ;

    % position first line extremity at, say, 1/3 gov node
    \coordinate (extr1) at ($(trans.north west)!0.33!(trans.north east)$) ;
    % then extremity 2 slightly at the right of extr1
    \coordinate (extr2) at ([xshift=2mm]extr1) ;

    % position bank vertically halfway gov/trans and centered wrt extr1 and extr2
    % due to some limitations in tikz parser, one must first define intermediate coords
    \coordinate (extr12) at ($(extr1)!0.5!(extr2)$) ;
    \coordinate (mid) at ($(gov)!0.5!(trans)$);
    \node[box] (bank) at (extr12 |- mid) {Bank};
    % draw first arrows
    \draw[myarrow] (extr1) -- (extr1 |- bank.south) node[label] {information};
    \draw[myarrow] (extr2 |- bank.south) -- (extr2) node[label] {monitoring};
    \draw[myarrow] (extr1 |- bank.north) -- (extr1 |- gov.south) node[label] {reporting} ;
    \draw[myarrow] (extr2 |- gov.south) -- (extr2 |- bank.north) node[label] {fines} ;
    % position last arrow midway from east border of bank and gov
    \coordinate (extr3) at ($(bank.east)!0.5!(gov.east)$) ;
    \draw[myarrow] (extr3 |- gov.south) -- (extr3 |- trans.north) node[label] {investigation} ;
\end{tikzpicture}
\end{document}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我想WHERE子句P.Type =“烤鸡肉”或“牛肉”有问题 多个OR子句数据库引擎尝试将“牛肉”评估为单独条件

将其更改为

B.Type =“酸面团”或P.类型(“烤鸡肉”或“牛肉”)