The following query works
select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
As expected, it returns
2005-11-08
The following query also works
select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
As expected, it returns
NULL
I should note there is a warning, but it doesn't stop the query from executing and returning a NULL result
show warnings
yields
But the problem occurs when I try to create a table from the result.
This works
CREATE TABLE myTable AS select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
But this does not
CREATE TABLE myTable AS select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
Error message is
Incorrect datetime value: 'XXXX' for function str_to_date
This is a very simple toy example, but I am trying to create a much larger table with many date values correctly parsed and it has the same effect.
What am I doing wrong?
The behavior you see implies to me that you are running in a strict SQL_MODE
(which is a good idea in general BTW).
You may be able to accomplish what you want by setting a less strict SQL_MODE
for your session.
Here's an example showing your CREATE TABLE
statement failing in MySQL 5.7 with STRICT_ALL_TABLES
mode, but succeeding once I remove that restriction:
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)