MYSQL Trigger установить значение даты и времени с помощью оператора case - PullRequest
3 голосов
/ 07 декабря 2011

Я использую mysqlimport для массовой вставки в таблицу (замена дубликатов первичных ключей). Несколько таблиц имеют столбцы даты и времени с записями, содержащими значения «0000-00-00». То, что я хотел бы, это триггер, который обнаруживает эти значения «0000-00-00» и заменяет на «1950-01-01», в противном случае сохранить значение datetime в записи (то есть, когда это не «0000-00-00») .

Я пробовал следующее:

CREATE TRIGGER set_datetime BEFORE INSERT ON tbl
FOR EACH ROW
CASE
WHEN date_col='0000-00-00' THEN SET date_col='1950-01-01';
END CASE

Спасибо.

EDIT

Попытка обновления:

CREATE TRIGGER set_datetime BEFORE INSERT ON tbl
FOR EACH ROW
IF (NEW.date_col='0000-00-00') THEN
SET NEW.date_col='1950-01-01';
END IF;

По-прежнему возникает ошибка в части SET.

РЕДАКТИРОВАТЬ 2

РАБОЧАЯ:

DELIMITER $$
CREATE TRIGGER insert_check BEFORE INSERT ON ar
FOR EACH ROW
BEGIN
    IF NEW.delivery_date='0000-00-00' THEN
        SET NEW.delivery_date='1950-01-01';
    END IF;
END; $$
DELIMITER ;

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

Использование IF THEN:

IF (NEW.date_col = '0000-00-00') THEN
  SET NEW.date_col='1950-01-01';
END IF;
1 голос
/ 07 декабря 2011
CREATE TRIGGER set_datetime BEFORE INSERT ON tbl 
FOR EACH ROW 
IF YEAR(NEW.date_col)=0 THEN
    SET NEW.date_col='1950-01-01 00:00:00'; 
END IF; 

Попробуй !!!

0 голосов
/ 27 марта 2013

Если вы хотите или должны использовать 'case', тогда это должно работать:

SET NEW.date_col=CASE WHEN NEW.date_col='0000-00-00' THEN ='1950-01-01'
WHEN NEW.date_col='something else' THEN 'whatever'
ELSE 'default'
END CASE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...