我必须创建一个函数,它给出了三个整数类型的参数,其中第一个表示一小时,第二个表示一分钟,第三个表示一秒,返回表中的记录数,其中DATETIME类型的列,小时等于第一个参数,或者分钟等于第二个参数,或者秒等于第三个参数。我需要检查参数对于要比较的列是否具有有效的值,否则返回值为-1。我已经这样做了,但它不能正常工作。
DELIMITER //
CREATE FUNCTION orders_placed(par_hour INT , par_minute INT , par_second INT )
RETURNS INT
BEGIN
DECLARE var_date DATETIME;
DECLARE var_counter INT;
DECLARE c1 CURSOR FOR SELECT date FROM orders;
IF (par_hour NOT BETWEEN 0 AND 23 OR par_minute NOT BETWEEN 0 AND 59 OR par_second NOT BETWEEN 0 AND 59) THEN
SET var_counter = -1;
END IF;
OPEN c1;
bucle: LOOP
FETCH c1 into var_date;
IF (par_hour = hour(var_date) OR par_minute = minute(var_date) OR par_second = second(var_date)) THEN
SET var_counter= var_counter + 1;
END IF;
END LOOP bucle;
CLOSE c1;
RETURNS var_counter;
END //
DELIMITER ;发布于 2020-05-14 02:15:33
您的查询有一些问题。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `orders_placed`(par_hour INT , par_minute INT , par_second INT ) RETURNS int
DETERMINISTIC
BEGIN
DECLARE var_date DATETIME;
DECLARE var_counter INT DEFAULT 0;
DECLARE finished INTEGER DEFAULT 0;
DECLARE c1 CURSOR FOR SELECT `date` FROM orders;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
IF (par_hour NOT BETWEEN 0 AND 23 OR par_minute NOT BETWEEN 0 AND 59 OR par_second NOT BETWEEN 0 AND 59) THEN
SET var_counter = -1;
ELSE
OPEN c1;
bucle: LOOP
FETCH c1 into var_date;
IF finished = 1 THEN
LEAVE bucle;
END IF;
IF (par_hour = hour(var_date) OR par_minute = minute(var_date) OR par_second = second(var_date)) THEN
SET var_counter= var_counter + 1;
END IF;
END LOOP bucle;
CLOSE c1;
END IF;
RETURN var_counter;
END$$
DELIMITER ;你确定我不想检查,如果所有的数字小时,分钟和秒都等于你的日期,因为你只检查其中一个是eual。
https://stackoverflow.com/questions/61781462
复制相似问题