gpt4 book ai didi

sql - 为 DATE_SUB 的单元参数使用存储过程参数

转载 作者:行者123 更新时间:2023-11-30 21:55:44 24 4
gpt4 key购买 nike

我想知道是否可以将参数传递给 mysql 存储过程并将此参数用作 DATE_SUB 函数的 unit 参数。 unit参数好像是保留字,不知道有没有unit类型。

我正在尝试做的事的例子:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`%` PROCEDURE `test`(param1 unit)
BEGIN

select DATE_SUB(now(), INTERVAL 1 param1);

END $$

DELIMITER ;

更新 1我尝试使用 prepare 语句,我能够创建存储过程。

DELIMITER $$

DROP PROCEDURE IF EXISTS `test` $$
CREATE DEFINER=`root`@`%` PROCEDURE `test`(param1 varchar(10))
BEGIN


PREPARE stmt FROM 'SELECT DATE_SUB(now(), INTERVAL 1 ?)';
EXECUTE stmt USING @param1;


END $$

DELIMITER ;

当我执行它时:调用测试('周');您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“?)”附近使用的正确语法

最佳答案

无论是否有准备好的语句,您尝试执行的操作在存储过程中都是不可能的。

你可以做类似这样的事情:

DELIMITER $$

DROP PROCEDURE IF EXISTS test_proc $$
CREATE PROCEDURE test_proc(param1 varchar(20))
BEGIN

CASE UPPER(param1)
WHEN 'MICROSECOND' THEN select DATE_SUB(now(), INTERVAL 1 MICROSECOND);
WHEN 'SECOND' THEN select DATE_SUB(now(), INTERVAL 1 SECOND);
WHEN 'MINUTE' THEN select DATE_SUB(now(), INTERVAL 1 MINUTE);
WHEN 'HOUR' THEN select DATE_SUB(now(), INTERVAL 1 HOUR);
WHEN 'DAY' THEN select DATE_SUB(now(), INTERVAL 1 DAY);
WHEN 'WEEK' THEN select DATE_SUB(now(), INTERVAL 1 WEEK);
WHEN 'MONTH' THEN select DATE_SUB(now(), INTERVAL 1 MONTH);
WHEN 'QUARTER' THEN select DATE_SUB(now(), INTERVAL 1 QUARTER);
WHEN 'YEAR' THEN select DATE_SUB(now(), INTERVAL 1 YEAR);
ELSE select 'UNEXPECTED UNIT';
END CASE;

END $$

DELIMITER ;

关于sql - 为 DATE_SUB 的单元参数使用存储过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com