Создать триггер, чтобы проверить, является ли дата рождения действительной или нет - PullRequest
0 голосов
/ 01 декабря 2019

Я также прочитал другой вопрос, но не нашел точного ответа, поэтому не помечайте его как дубликат. Итак, я хочу иметь триггер, чтобы проверить, является ли ДАТА действительной датой рождения. Итак, в начале я попытался создать пользовательское ограничение с birth_date<NOW(), но я, очевидно, получил ошибку

Затем я попытался использовать этот триггер из другого вопроса

CREATE OR REPLACE TRIGGER check_birth_date
  BEFORE INSERT OR UPDATE ON employee
  FOR EACH ROW
BEGIN
  IF( :new.emp_dob < date '1900-01-01' or 
      :new.emp_dob > sysdate )
  THEN
    RAISE_APPLICATION_ERROR( 
      -20001, 
      'EMployee date of birth must be later than Jan 1, 1900 and earlier than today' );
  END IF;
END;

, но я получилсинтаксическая ошибка, потому что это в Oracle, а не в MySQL.

Итак, Как я могу преобразовать это в MySQL Trigger? Я использую MySQL Workbench 8.0

ЯЯ все еще делаю первые попытки использования MySQL, так что я не очень хорош в этом, поэтому, если вы можете, я бы с радостью узнал, почему вы использовали somenthing и как, если возможно: D

Заранее спасибо

1 Ответ

0 голосов
/ 01 декабря 2019

Рассмотрим следующее:

SELECT '2000-11-01' BETWEEN '1900-01-01' AND CURDATE() x;
+---+
| x |
+---+
| 1 |
+---+

SELECT '1899-11-01' BETWEEN '1900-01-01' AND CURDATE() x;
+---+
| x |
+---+
| 0 |
+---+

SELECT '2020-11-01' BETWEEN '1900-01-01' AND CURDATE() x;
+---+
| x |
+---+
| 0 |
+---+

Так что это может быть адаптировано к чему-то вроде:

INSERT INTO valid_dates
SELECT '2000-11-01' FROM (SELECT 1)a WHERE '2000-11-01' BETWEEN '1900-01-01' AND CURDATE();
...