2

以下查询有效

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

这是一个非常简单的玩具示例,但我正在尝试创建一个更大的表,其中包含许多正确解析的日期值,并且具有相同的效果。

我究竟做错了什么?

4

2 回答 2

3

您看到的行为向我暗示您正在严格运行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)
于 2016-10-28T19:23:03.533 回答
0

很好地尝试了你上面提到的两个查询,似乎对我来说工作正常。唯一的问题是在第二个查询中插入的值是 NULL,这就是你所说的你所期望的。

于 2016-10-28T19:18:31.317 回答