【问题标题】:Warning (Code 1411): Incorrect datetime value:警告(代码 1411):日期时间值不正确:
【发布时间】:2015-08-03 13:47:39
【问题描述】:

您好,我正在尝试使用 mysql INFILE 命令将数据添加到表中,但出现以下错误。

Warning (Code 1411): Incorrect datetime value: ''2015-05-15 15:57:46'' for function str_to_date
Warning (Code 1048): Column 'transaction_time' cannot be null

mysql -uroot 测试 --show-warnings -vve "加载数据文件 '/Users/xyz/log2.tsv' 进入由 '\t' 终止的表 logs_master 字段 由 '' 包围的行以 '\n' (@transaction_time, col2, col3, col4,...) SET updated_at = NOW(), transaction_time = STR_TO_DATE(@transaction_time, '%Y-%m-%d %H:%i:%s')"

CREATE TABLE `test_action_logs_master` (
  `transaction_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `col1` varchar(100) DEFAULT NULL,
  `col2` varchar(700) DEFAULT NULL,
  `col3` varchar(700) DEFAULT NULL,
  `col4` varchar(700) DEFAULT NULL,
  `col5` varchar(200) DEFAULT NULL,
  `col6` varchar(700) DEFAULT NULL,
  `col7` varchar(700) DEFAULT NULL,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY `col3` (`col3`),
  KEY `col4` (`col4`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

mysql版本:服务器版本:5.6.25 机器:OS X(MAC) Yosemite

show variables like 'sql_mode'
    -> ;
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

我通过查看有关该问题的其他线程并查看链接进行了更改 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

不知何故,它不起作用并给出了列出的错误。其余字段的来源正确,只是没有获得作为日期时间值的前导字段。

【问题讨论】:

  • 文件中的值是否有可能实际上是用单引号括起来的,例如'2015-05-15 15:57:46'而不是2015-05-15 15:57:46?作为一般规则,我将文件读入仅包含字符的临时表,然后在数据库中进行转换。以这种方式处理数据转换问题通常要容易得多。
  • 嗨,戈登,谢谢您的回复。是的,日期用单引号括起来。我认为问题在于我提供给 STR_TO_DATE 的格式。我的数据集很大,使用临时表需要大量时间进行转换。但是是的,我认为该解决方案应该有效,因为插入语句的同一日期可以完美运行。
  • 不知道你为什么把它标记为 Python。
  • 嗨哈立德。我在 python 中进行转换。
  • @GordonLinoff:感谢您指出,问题在于 tsv 文件中的日期字段用单引号括起来。当您删除引号时,它会起作用!!!

标签: mysql sql datetime


【解决方案1】:

您的日期字段包含在一对额外的单引号中,因此您需要相应地调整格式;这将为您提供正确的结果(注意额外的引号):

SELECT STR_TO_DATE("'2015-05-15 15:57:46'", "'%Y-%m-%d %H:%i:%s'")

您当前的语句如下,由于模式不匹配,您得到NULL

SELECT STR_TO_DATE("'2015-05-15 15:57:46'", '%Y-%m-%d %H:%i:%s')  

【讨论】:

  • 感谢您的帮助!我认为问题在于单引号本身。日期不应在 tsv 文件中用单引号引起来。我正在尝试通过命令行获取文件。我通过命令行尝试了您的解决方案,方法是将 STR_TO_DATE 中的文字用双引号括起来,然后用单引号括起来。但这在命令行上不起作用。它给出了语法错误。
猜你喜欢
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多