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');
此处日期的数据类型应为&#39; datetime&#39;。但是,当我调用该过程时,它会返回错误代码,说明要检查正确的语法。
当我将开始日期和结束日期的数据类型更改为&#39; date&#39;时,该调用将返回错误消息,指出日期值不正确。虽然创建了视图,但它是空的。
首次使用本网站。谢谢你们。
------------------- update --------------
我找到了解决方案。它只是简单地添加&#34;这个日期之前和之后。 ---其中lud_dtm&gt; =&#34;&#39;,SetStartDate,&#39;&#34;和lud_dtm&lt; &#34;&#39;,SetEndDate,&#39;&#34 ;;&#39)
花了我几个小时才发现。洛尔
答案 0 :(得分:1)
您必须转义单引号字符(&#39;)以包含日期时间字符串。
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' "