【问题标题】:MySQL 8.0: Error when inserting date dataMySQL 8.0:插入日期数据时出错
【发布时间】:2020-02-22 16:25:02
【问题描述】:

我有一个制表符分隔文件,如下所示:

当我尝试在 MySql 中按如下方式导入文件时:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

我收到以下错误:

不正确的日期值:第 1 行“BI_signup_date”列的“02/15/2008”

我该如何解决这个问题?

【问题讨论】:

    标签: mysql sql csv datetime load-data-infile


    【解决方案1】:

    您文件中的日期格式与 MySQL 预期的格式不匹配。此外,您在该列中有一些非日期值 ('not BI')。一种解决方案是预处理您的输入以将其转换为相关格式。

    LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
    INTO TABLE customers
    FIELDS TERMINATED BY '\t'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    (customer_id, @BI_signup_date, email_address)
    SET BI_signup_date = CASE
        WHEN @BI_signup_date = 'not BI' THEN NULL
        ELSE STR_TO_DATE(@BI_signup_date, '%m/%d/%Y')
    END;
    

    这会将值'not BI' 转换为NULL(因为显然这不能转换为日期),并将其他值转换为 MySQL 日期格式。其他策略也是可能的,例如根据正则表达式检查值的格式。您可以根据需要修改逻辑。

    参考:Input preprocessing in MySQL LOAD DATA syntax

    每个col_name_or_user_var 值要么是列名,要么是用户变量。对于用户变量,SET 子句使您能够在将结果分配给列之前对其值执行预处理转换。

    【讨论】:

    • 我使用了这个,现在我收到以下错误:错误 1411 (HY000): Incorrect datetime value: 'not BI' for function str_to_date
    • @AlhpaDelta:查询有问题吗?它未被接受并被否决。
    • 谢谢,这确实获取了数据,但是第 4 行和第 8 行紧随“非 BI”日期未正确上传的行之后。当我执行“select * from customers”或“select customer_id,email_address” from customers”时,输出不显示 customer_id。当我再次从客户中选择 customer_id,BI_signup_date,email_address WHERE customer_id =8 时没有 customer_id输出
    • 当我执行“select customer_id,BI_signup_date,email_address from customers WHERE customer_id =8”或“select customer_id,BI_signup_date,email_address from customers WHERE customer_id =4”时,输出是正确的,除了customer_id没有被打印!这很奇怪。我想知道为什么会这样
    • @AlhpaDelta:嗯,如果像select ... where customer_id = 8 这样的语句返回一条记录,则表示对应的customer_id正确加载到表中,对吧?看来您在 显示 数据时确实有问题...
    【解决方案2】:

    编辑您的 csv 文件并将日期格式转换为 Y-m-d。 这将解决您关于日期格式的所有问题。

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      • 2013-03-14
      • 1970-01-01
      相关资源
      最近更新 更多