我的数据库中的一个表包含某个项目的check_in_date
和checkout_date
。我想创建一个触发器,如果有人输入的签出日期早于签到日期,则不允许更新表格,例如签入时间为2017-10-16,然后是2017-10-14不应该允许结账。我看了https://dev.mysql.com/doc/refman/5.7/en/using-date.html,并说它在将两列与日期进行比较时应使用STRCMP
。所以我尝试了,但它仍然接受任何日期。我可能正在使用STRCMP
错误,当第一个参数较小时它应返回-1,但我不确定这是否是在if语句中使用它的正确方法。
DROP TRIGGER IF EXISTS check_dates;
DELIMITER //
CREATE TRIGGER check_dates
BEFORE UPDATE ON dates
FOR EACH ROW
BEGIN
IF STRCMP('NEW.checkout_date', 'check_in_date')=-1
THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Checkout date must be after the checkin.';
END IF;
END;//
DELIMITER ;