Невозможно создать таблицу mysql из-за неверного значения даты и времени "..." для функции str_to_date
Следующий запрос работает
select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
Как и ожидалось, возвращается
2005-11-08
Следующий запрос также работает
select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
Как и ожидалось, возвращается
NULL
Я должен отметить, что есть предупреждение, но оно не останавливает выполнение запроса и возврат результата NULL
show warnings
доходность
Но проблема возникает, когда я пытаюсь создать таблицу из результата.
Это работает
CREATE TABLE myTable AS select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
Но это не
CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
Сообщение об ошибке
Incorrect datetime value: 'XXXX' for function str_to_date
Это очень простой игрушечный пример, но я пытаюсь создать гораздо большую таблицу с правильно проанализированным множеством значений даты, и она имеет тот же эффект.
Что я делаю неправильно?
2 ответа
Поведение, которое вы видите, подразумевает, что вы работаете в строгом SQL_MODE
(что является хорошей идеей в общем, кстати).
Вы можете достичь желаемого, установив менее строгий SQL_MODE
для вашей сессии.
Вот пример, показывающий ваши CREATE TABLE
заявление, терпящее неудачу в MySQL 5.7 с STRICT_ALL_TABLES
режим, но успешно, как только я снимаю это ограничение:
mysql> select @@session.sql_mode;
+--------------------+
| @@session.sql_mode |
+--------------------+
| STRICT_ALL_TABLES |
+--------------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"));
ERROR 1411 (HY000): Incorrect datetime value: 'XXXX' for function str_to_date
mysql> set session sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"));
Query OK, 1 row affected, 1 warning (0.02 sec)
Records: 1 Duplicates: 0 Warnings: 1
mysql> select * from myTable;
+-----------------------------------------------+
| date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S")) |
+-----------------------------------------------+
| NULL |
+-----------------------------------------------+
1 row in set (0.01 sec)
Хорошо попробовал оба запроса, которые вы заявили выше, и, кажется, работает нормально для меня. Единственное, что значение, вставленное во второй запрос, равно NULL, что вы и ожидали.