【问题标题】:Can't create mysql table due to Incorrect datetime value "..." for function str_to_date由于函数 str_to_date 的日期时间值“...”不正确,无法创建 mysql 表
【发布时间】:2017-03-11 17:46:24
【问题描述】:

以下查询有效

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

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

我做错了什么?

【问题讨论】:

    标签: mysql datetime str-to-date


    【解决方案1】:

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

    【讨论】:

    • 我想知道它是否与系统设置或抑制警告有关。我在带有 MySQL 5.6 的 mac OSX 上
    【解决方案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)
    

    【讨论】:

    • 谢谢!这对我来说是个问题
    • 是的……对我来说也是个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2017-09-17
    • 2012-08-25
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多