MySQL 存储过程中的数据值不正确

Incorrect data value in MySQL stored procedure

DELIMITER //
DROP PROCEDURE if exists mzeng.test2//
CREATE  PROCEDURE mzeng.test2(TerminalName VARCHAR(25),tablename varchar(25), SetStartDate datetime,  SetEndDate datetime)

BEGIN
SET @t1 =CONCAT('create view mzeng.',tablename,' as SELECT * FROM ',TerminalName,'.restaurants where lud_dtm >= ', SetStartDate,' and lud_dtm < ',SetEndDate);

PREPARE stmt3 FROM @t1;
EXECUTE stmt3;
DEALLOCATE PREPARE stmt3;

end//
DELIMITER ;

call mzeng.test2('otg_ewrc1', 'EWRc1_TransactionalTable2','2017-07-01 04:00:00','2017-07-02 04:00:00');

此处日期的数据类型应为'datetime'。但是,当我调用该过程时,它 returns 错误代码说明了一些检查正确语法的内容。

当我将开始日期和结束日期的数据类型更改为 'date' 时,调用 returns 错误消息指出不正确的日期值。虽然创建了视图,但它是空的。

第一次使用这个网站。谢谢大家。

--------------------更新-------------

我找到了解决办法。它只是简单地在日期之前和之后添加“这个。 --- 其中 lud_dtm >= "', SetStartDate,'" 和 lud_dtm < "',SetEndDate,'";')

我花了好几个小时才弄明白。哈哈

您必须转义单引号字符 (') 以将日期时间字符串括起来。

SET @t1 =CONCAT('create view mzeng.',tablename,' as SELECT * FROM '
      ,TerminalName,'.restaurants '
      ,'where lud_dtm >= \'', SetStartDate,'\' and lud_dtm < \'',SetEndDate,'\''); 

连接后的结果:

"... lud_dtm >= '2017-07-01 04:00:00' and lud_dtm < '2017-07-02 04:00:00' "