重新格式化输入 DATE 数据

Reformat input DATE data

我有一个相当大的文件(超过 200,000 条记录),我要将其插入到包含 59 列的 table 中。数据包含多个 DATETIME 字段。输入日期的格式为“10/06/2019 10:45:58”。如何将这些字段输入为 DATETIME(或者可能只是 DATE,因为 TIME 字段与我的目的无关)?

如果我将各种日期字段设置为键入 DATETIME,加载后这些字段将显示为 0000-00-00 00:00:00。那是因为数据库不知道如何处理输入格式。

我看到了两种不同的方法,但每种方法都有问题:

预处理:
我创建了一个脚本来使用 Regex 检测日期字段,并使用类似 Perl 的 DateTime::Format::DBI 将它们重新格式化为预期的格式。这里存在风险,因为记录包含自由格式的文本字段,其中可能包含嵌入的逗号和引号。仅仅因为规模,就很难确定 DATE 字段。

Post-处理:
创建日期字段为 VARCHAR 的 table 并使用 STR_TO_DATE SQL 函数填充日期列。

INSERT INTO mytable(DATELastDetected, DATEFirstDetected) 
  SELECT STR_TO_DATE(LastDetected, '%c/%e/%Y %H:%i'), 
  STR_TO_DATE(FirstDetected, '%c/%e/%Y %H:%i') 
from mytable;

第三个选项?
我想知道我是否可以在 CREATE TABLE 语句中为该 DATE 列指定输入数据的预期格式,这将使整个讨论变得毫无意义。我看到 提到在 CREATE TABLE 语句中使用 DATEFORMAT,但我没有找到正确的语法来使用。

感谢任何想法。

@ben-personick 用他的评论回答了这个问题。这是我的 Load 语句的样子:

    LOAD DATA INFILE '/opt/mysql/work/report.csv'
        INTO TABLE `my_db`.`tbl_reportdata`
    CHARACTER SET utf8mb4
    FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        ESCAPED BY '"'
        LINES TERMINATED BY '\r\n'
        IGNORE 1
        LINES (`IP`,
[...]
                `OS`,
                @FirstDetectedVar,# This field is defined as DATETIME
                @LastDetectedVar, # This field is defined as DATETIME
[...]
                `Category`)
        set
        `FirstDetected` = str_to_date(@FirstDetectedVar, '%m/%d/%Y %H:%i'),
        `LastDetected` = str_to_date(@LstDetectedVar, '%m/%d/%Y %H:%i');

我想答案就在那里。希望这个工作示例能对其他人有所帮助。