我在比较MySQL时间字段时遇到问题,我从09:00
到10:00
有一个NOEVENTS行,我试图在另一个表中插入一行,但我需要比较NOEVENTS时间,到传入的时间字段。例如:
我想从09:15
到09:30
插入一个事件,从10:00
到11:00
插入另一个事件,那么我该如何比较呢?我试着这个:
select count(idNOEVENTS) into existNOEVENT from NOEVENTS b where eventInitialTime && eventFinalTime between b.initialTime and b.finalTime;
if existNOEVENT>0
SET MESSAGE_TEXT = 'Error! no events allowed at this time';
问题是当我尝试将09:15
插入09:30
时,它会抛出上面显示的错误消息。这很好,它的工作原理,但是当我尝试将10:00
插入到11:00
事件时,它会抛出消息,而且它不应该,我该如何修复它?还是比较好一点?
谢谢,对不起我糟糕的英语。
答案 0 :(得分:1)
你可以这样做
SELECT *
FROM noevents
WHERE (? > initialTime AND ? < finalTime)
OR (? > initialTime AND ? < finalTime)
现在不要使用COUNT(*)
来检查是否存在行。请改用EXIST()
。
据说这可以让您了解程序代码的外观如何
DELIMITER $$
CREATE PROCEDURE add_event(IN _start TIME, IN _end TIME)
BEGIN
IF EXISTS(SELECT *
FROM noevents
WHERE (_start > initialTime AND _start < finalTime)
OR (_end > initialTime AND _end < finalTime)) THEN
SIGNAL sqlstate '45000'
SET message_text = 'Error! no events allowed at this time';
ELSE
-- Do whatever you have to do to insert an event
SELECT 'Success: event added';
END IF;
END$$
DELIMITER ;
这是 SQLFiddle 演示