我正在尝试创建一个存储过程,该存储过程将执行在结束前显示为行的选择。它将从我的usertable中获取最早的StartDate和最新的EndDate,并从我的参考日历表中选择这些日期之间的所有日期。不幸的是,无论我将尝试使用什么语法,我总是会收到一条错误消息,指出将usertable选择的值分配给start / endday变量。我没有找到很多资源来指定我从以下实例中看到的正确语法。
DELIMITER $$
CREATE PROCEDURE seldays()
BEGIN
DECLARE startday DATE;
SET startday = (SELECT MIN(StartDate) from user1table1);
DECLARE endday DATE;
SET endday = (SELECT MAX(EndDate) from user1table1);
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday;
END $$
DELIMITER ;
我也试图分配值
SELECT MIN(StartDate) from user1table1 INTO endday;
无济于事。我可能能够在不存储这些变量的情况下使程序工作 - 但这是我迟早需要使用的东西。 那么如何在Mysql中正确填充查询结果的局部变量呢?
答案 0 :(得分:2)
我只会在一个查询中执行此操作。为什么要打扰变量?
SELECT c.calendar_date
FROM calendar c JOIN
(SELECT MIN(StartDate) as startday, MAX(EndDate) as endday
FROM user1table1
) u
ON c.calendar_date >= u.startday AND c.calendar_date < u.endday;
答案 1 :(得分:1)
感谢评论 “声明变量应该在Ankit Agrawal上面”......
我可以得出结论。我发布这篇文章作为正确答案,所以如果有人有同样的问题,他们可以快速查看。
DECLARE只允许在BEGIN ... END复合语句中使用,并且必须在其开始之前,在任何其他语句之前。
DELIMITER $$
CREATE PROCEDURE seldays()
BEGIN
DECLARE startday DATE;
DECLARE endday DATE;
SELECT MIN(StartDate) INTO startday FROM user1table1;
SELECT MAX(EndDate) INTO endday FROM user1table1;
SELECT calendar_date FROM calendar WHERE calendar_date >= startday AND calendar_date< endday;
END $$
DELIMITER ;
答案 2 :(得分:0)
SELECT MIN(StartDate) into startday from user1table1
答案 3 :(得分:0)
在MySQL中,您可以使用select ... into <variable list> from ...
statement分配结果变量:
select min(StartDate) into startday from user1table1;
select max(EndDate) into endday from user1table1;