正确比较时间值

时间:2013-12-22 05:07:40

标签: mysql time

我在比较MySQL时间字段时遇到问题,我从09:0010:00有一个NOEVENTS行,我试图在另一个表中插入一行,但我需要比较NOEVENTS时间,到传入的时间字段。例如:

我想从09:1509:30插入一个事件,从10:0011: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事件时,它会抛出消息,而且它不应该,我该如何修复它?还是比较好一点?

谢谢,对不起我糟糕的英语。

1 个答案:

答案 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 演示