由于函数 str_to_date 的日期时间值“...”不正确,无法创建 mysql table
Can't create mysql table due to Incorrect datetime value "..." for function str_to_date
以下查询有效
select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
不出所料,returns
2005-11-08
以下查询也有效
select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
不出所料,returns
NULL
我应该注意到有一个警告,但它不会阻止查询执行并返回 NULL 结果
show warnings
产量
但是当我尝试从结果创建 table 时出现问题。
这个有效
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
这是一个非常简单的玩具示例,但我正在尝试创建一个更大的 table,其中包含许多正确解析的日期值,并且它具有相同的效果。
我做错了什么?
我试过你上面提到的两个问题,似乎对我来说工作正常。唯一的问题是在第二个查询中插入的值是 NULL,这正是您所说的。
你看到的行为向我暗示你 运行 在一个严格的 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)
以下查询有效
select date(str_to_date("08-Nov-2005 22:07","%d-%M-%Y %H:%i:%S"))
不出所料,returns
2005-11-08
以下查询也有效
select date(str_to_date("XXXX","%d-%M-%Y %H:%i:%S"))
不出所料,returns
NULL
我应该注意到有一个警告,但它不会阻止查询执行并返回 NULL 结果
show warnings
产量
但是当我尝试从结果创建 table 时出现问题。
这个有效
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
这是一个非常简单的玩具示例,但我正在尝试创建一个更大的 table,其中包含许多正确解析的日期值,并且它具有相同的效果。
我做错了什么?
我试过你上面提到的两个问题,似乎对我来说工作正常。唯一的问题是在第二个查询中插入的值是 NULL,这正是您所说的。
你看到的行为向我暗示你 运行 在一个严格的 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)