如何在执行 LOAD DATA INFILE 时将 VARCHAR 日期转换为标准 MYSQL 日期格式

How to convert VARCHAR date to a standard MYSQL date format when doing LOAD DATA INFILE

在我的 table 中,我有一整列都有 varchar 日期,这是它的样子:2/1/2020 02:30:00(日期是 m/d/yyyy)我想要它转换为标准 MySQL 日期格式 (yyyy-mm-dd) 或者如果可能的话可能是自定义日期格式版本。如果可能的话,我还想删除时间 (02:30:00)。是否有任何命令可以让我在终端上 运行 将整个列或导入到数据库中,从 .xls 文件格式转换为 .sql 文件格式。另一件事是在 MySQL 中不可能,也许 PHP 中有一种方法可以转换或操作上述数据。谢谢。

此外,也许还有一种方法可以将时间转换为标准 MySQL 时间格式。

我不确定如何更改我的问题,这里有一些额外的数据。

这是显示警告的结果,我不确定这是怎么回事,我做错了什么,但在给定的例子中它工作正常。我会继续尝试,但我很满意我得到了两个非常好的建议和方法,一个在 mysql 一侧,一个在 php 一侧。谢谢。

使用 strtotimedate 函数将此日期处理为 MySQL 日期格式:

$db_date = "2/1/2020  02:30:00";
$new_date = date( "Y-m-d" , strtotime($db_date) );

解释:

strtotime($db_date) 这会将字符串日期转换为 unix 时间戳

date( "Y-m-d" , .... ) 这会将 unix 时间戳转换为 YYYY-MM-DD (Y-m-d) 格式

演示:https://3v4l.org/GOr34

您可以直接在 MySQL 中进行翻译,使用 STR_TO_DATE to translate the string into a DATETIME value, and then DATE and TIME 提取日期和时间部分:

SELECT DATE(STR_TO_DATE('2/1/2020 02:30:00', '%c/%e/%Y')) AS date,
       TIME(STR_TO_DATE('2/1/2020 02:30:00', '%c/%e/%Y %H:%i:%s')) AS time

输出:

date        time
2020-02-01  02:30:00

Demo on dbfiddle

LOAD DATA INFILE ...
    (col1, col2, @str)
    SET col3 = STR_TO_DATE(@str, '%c/%e/%Y %H:%i:%s');

也就是将传入的字符串存储到一个@变量中,然后在LOAD DATA语句中进行转换。