日期为IN的MySQL过程失败
第一次海报非常感谢任何帮助 我完全被MySQL存储过程的问题所困扰,对它们完全没有兴趣 这是当前编写的过程,MySQL接受它没有任何问题,因此除非有语法错误,否则该过程编写正确 但是当我调用程序时 呼叫测试2011-04-012011-04-07; 没有返回结果,但select语句工作正常日期为IN的MySQL过程失败,mysql,stored-procedures,Mysql,Stored Procedures,第一次海报非常感谢任何帮助 我完全被MySQL存储过程的问题所困扰,对它们完全没有兴趣 这是当前编写的过程,MySQL接受它没有任何问题,因此除非有语法错误,否则该过程编写正确 但是当我调用程序时 呼叫测试2011-04-012011-04-07; 没有返回结果,但select语句工作正常 CREATE PROCEDURE `NewProc`(IN `@StartDate` date,IN `@EndDate` date) BEGIN SELECT aux1, aux2, aux3, aux
CREATE PROCEDURE `NewProc`(IN `@StartDate` date,IN `@EndDate` date)
BEGIN
SELECT aux1, aux2, aux3, aux4, date, id, type,
CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS CertStatus,
CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS TestStatus,
CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS TestStatus,
CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS TestStatus
from completed
WHERE date >= '@StartDate' and date <= '@EndDate';
END;
日期必须在引号内传递
call test ('2011-04-01', '2011-04-07');
编辑。如果您的存储过程名为NewProc,为什么要调用test?快速清理-我将把它留给“@you”来发现“差异”,并且不止“1”
delimiter ;
drop procedure if exists list_test_status;
delimiter #
create procedure list_test_status
(
in p_start_date date,
in p_end_date date
)
begin
select aux1, aux2, aux3, aux4, date, id, type,
case
when results = 'pass' then 1
when results = 'fail' then 0
else -1
end as CertStatus,
case
when results = 'pass' then 1
when results = 'fail' then 0
else -1
end as TestStatus,
case
when results = 'pass' then 1
when results = 'fail' then 0
else -1
end as TestStatus,
case
when results = 'pass' then 1
when results = 'fail' then 0
else -1
end as TestStatus
from
completed
where
date >= p_start_date and date <= p_end_date;
end#
delimiter ;
call list_test_status(curdate() - interval 1 month, curdate());
不要引用变量,否则字符串“@xxx”无法转换为无效日期。 不要反勾选参数 您还将返回TestStatus 3次。。。疯狂的东西
CREATE PROCEDURE `NewProc`(IN StartDate date,IN EndDate date)
BEGIN
SELECT aux1, aux2, aux3, aux4, date, id, type,
CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS CertStatus,
@cache := CASE
WHEN results = 'pass' THEN '1'
WHEN results = 'fail' THEN '0'
ELSE '-1'
END AS TestStatus,
@cache AS TestStatus, # 2nd time ?
@cache AS TestStatus # 3rd time ??
from completed
WHERE date >= StartDate and date <= EndDate;
END;
感谢您的快速回复,遗憾的是,这仍然没有返回任何结果。您是否尝试过使用相同的两个日期在不使用存储过程的情况下运行查询?您确定该范围内有记录吗?此外,尝试删除@StartDate和@enddate的引号。我甚至不理解所有这些情况的含义。我以前没有注意到它们。您总是将它们应用于相同的值,并多次重复它们。这没用。尼克,这些案例用于其他领域,我做了一个快速剪切粘贴来隐藏实际的领域名称。我的目的是在问题的一部分中维护查询的整体完整性。