列中的时间限制

时间:2017-01-14 02:54:06

标签: mysql datetime

你好,我有一个日期时间列,我想对它进行时间限制,我该怎么做?

例如,从3:00:00到15:00:00的时间范围,如果没有抛出和错误并且停止在列中输入数据,则存储符合此条件的所有数据

2 个答案:

答案 0 :(得分:2)

在MySQL中,您必须使用INSERT和UPDATE上的触发器执行此操作,因此如果有人尝试输入的值不符合您的条件,则会引发SIGNAL。

mysql> CREATE TABLE MyTable (
  my_datetime DATETIME
);

mysql> DELIMITER ;;
mysql> CREATE TRIGGER MyTable_ins BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  IF (NOT TIME(NEW.my_datetime) BETWEEN '03:00:00' AND '15:00:00') THEN
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = 'Time does not fall in the range allowed.'
  END IF;
END;;
mysql> DELIMITER ;

如果尝试做一些我不应该做的事情,我会收到错误:

mysql> INSERT INTO MyTable SET my_datetime = '2017-01-13 18:00:00';

ERROR 1644 (45000): time does not fall in the range allowed

但如果我选择允许的时间,它就有效:

mysql> INSERT INTO MyTable SET my_datetime = '2017-01-13 11:00:00';

Query OK, 1 row affected (0.00 sec)

答案 1 :(得分:0)

我做了一些挖掘和一些阅读。我在自己的服务器上测试了一些东西。它不起作用。然后我找到了这个答案:

CHECK constraint in MySQL is not working

是的,它接受CHECK约束作为有效语法,然后完全忽略它。

在我测试和写作的同时,Bill已经发布了MySQL的正确答案。做他说的。