Триггер не работает для преобразования 'm / d / YYY' в тип DATE. РЕПРО включено

0

Я собираюсь вставлять данные из файла, и я хотел бы иметь возможность преобразовывать тип данных с помощью MySQL вместо базового языка. Вот что я делаю, но это не работает, и я не могу понять это. Спасибо!

create table t1 (TEST_DATE DATE);

DELIMITER |
create trigger t1FixDate BEFORE INSERT ON t1
    FOR EACH ROW BEGIN
        SET NEW.TEST_DATE=STR_TO_DATE(NEW.TEST_DATE, '%c/%e/%Y');
END; |
DELIMITER ;

insert into t1 VALUES ('9/7/2016');
//Error Code: 1292. Incorrect date value: '9/7/2016' for column 'TEST_DATE' at row 1

edit: работает ниже SQL. Я действительно в тупике. Выполняются триггеры перед проверкой типов?

create table t2 (TEST_DATE DATE);
insert into t2 VALUES (STR_TO_DATE('9/7/2016', '%c/%e/%Y'));
Теги:

1 ответ

0

Согласно руководству,

Ключевое слово BEFORE указывает время срабатывания триггера. В этом случае триггер активируется перед каждой строкой, вставленной в таблицу

Таким образом, триггер работает со строкой, которая уже была создана, но не добавлена в таблицу. Это означает, что ваша строка была назначена столбцу с типом данных Date, эта операция не удалась (null был назначен). И после этого триггер был вызван, поэтому он имеет дело с нулевым значением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню