使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确

Posted

技术标签:

【中文标题】使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确【英文标题】:Incorrect datetime value loading data into MySQL from file with str_to_date function 【发布时间】:2021-07-16 13:45:34 【问题描述】:

这让我发疯,尝试了 2 天,查看这里和 mysql 文档没有成功。

我有一个包含这些数据的文件:

Test,String 1,Completed,full,04/20/21 12:10:01,1618913401
Test,String 2,Completed,full,04/20/21 12:15:01,1618913701
Test,String 3,Completed,full,04/20/21 12:30:02,1618914602
Test,String 4,Completed,full,04/20/21 13:30:01,1618918201
Test,String 5,Completed,full,04/20/21 14:00:01,1618920001

我正在尝试使用以下命令将其插入 mysql:

LOAD DATA LOCAL INFILE 'output2.csv'
INTO TABLE test
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(`Session Type`, `Specification`, `Status`, `Mode`, @StartTime, `Start Time_t`)
SET `Start Time` = STR_TO_DATE(@StartTime, '%d/%m/%y %T');

Result:
Query OK, 5 rows affected, 10 warnings (0.00 sec)
Records: 5  Deleted: 0  Skipped: 0  Warnings: 10

MariaDB [data]> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------+
| Level   | Code | Message                                                                |
+---------+------+------------------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '04/20/21 12:10:01' for function str_to_date |
| Warning | 1048 | Column 'Start Time' cannot be null                                     |
| Warning | 1411 | Incorrect datetime value: '04/20/21 12:15:01' for function str_to_date |
| Warning | 1048 | Column 'Start Time' cannot be null                                     |
| Warning | 1411 | Incorrect datetime value: '04/20/21 12:30:02' for function str_to_date |
| Warning | 1048 | Column 'Start Time' cannot be null                                     |
| Warning | 1411 | Incorrect datetime value: '04/20/21 13:30:01' for function str_to_date |
| Warning | 1048 | Column 'Start Time' cannot be null                                     |
| Warning | 1411 | Incorrect datetime value: '04/20/21 14:00:01' for function str_to_date |
| Warning | 1048 | Column 'Start Time' cannot be null                                     |
+---------+------+------------------------------------------------------------------------+

Start Time 是日期时间类型。

【问题讨论】:

我认为你的%d%m 的方式有误,试试STR_TO_DATE(@StartTime, '%m/%d/%y %T'); 【参考方案1】:

如果你仔细看,日期是令人困惑的美国格式,月份不可能是 20 :) 所以只需将格式修复如下

STR_TO_DATE('04/20/21 14:00:01', '%m/%d/%y %T');

【讨论】:

天哪。花了几个小时,谢谢老兄。 幸运的是日期不是01/01/21,这将是 9 个月之前这个扼杀的错误:)

以上是关于使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确的主要内容,如果未能解决你的问题,请参考以下文章

sql中将字符串和时间格式的互相转换:date_format()str_to_date()

STR_TO_DATE() 从正确的格式返回错误的数据

MariaDB:如何使用STR_TO_DATE考虑本地日期格式?

MYSQL中str_to_date函数的用法

MySQL STR_TO_DATE函数

MySQL STR_TO_DATE函数