【问题标题】:how to ignore / skip invalid data row in LOAD DATA INFILE while loading data from csv.从 csv 加载数据时如何忽略/跳过 LOAD DATA INFILE 中的无效数据行。
【发布时间】:2013-02-13 06:42:18
【问题描述】:

我正在尝试从 CSV 文件加载数据,在少数日期字段列中,CSV 中的数据无效。但是当我运行 LOAD DATA INFILE 语句时,它会在这些列中插入 NULL 值。如何跳过包含无效数据的整行?

【问题讨论】:

  • 什么意思 - 无效?如果存在无效数据,则 LOAD DATA INFILE 将停止工作;但在您的情况下,它会继续工作,只是插入 NULL。显示示例。
  • 是的,它插入 NULL 但不是 NULL,我想跳过无效的记录插入(与数据库中的数据类型不匹配的数据,例如插入到日期时间字段的字符串数据)。

标签: mysql load-data-infile


【解决方案1】:

如果您正在使用加载文件功能,则不能跳过这些行。做一件事,首先将所有数据加载到临时表中,然后从该表中仅将有效行拉到临时表中。一旦您将所有行插入到临时表中,请删除该临时表!

【讨论】:

  • 你的意思是使用 IGNORE LINES 吗?其实想问一下,有没有在不指定行号的情况下做到这一点。 MySQL, LOAD DATA INFILE 中有什么可以识别无效行并跳过那些吗?
  • 不,我不是说忽略行。由于行可能不固定,因此您不能使用忽略行。在加载文件功能中没有这样的方法可以满足您的目的。最好使用我在回答中建议的内容。
  • 谢谢,但是在临时表中加载数据的时候,它会插入NULL值,无法识别哪些NULL值是由于无效数据而哪些不是?跨度>
  • 您说的是哪种类型的无效数据?在INFILE插入过程中,你可以检查或验证任何东西。但是一旦你将数据插入到临时表中,你就可以分析哪个是无效的,哪个是无效的。
【解决方案2】:

当您通过 csv 文件加载数据时。日期应为 yyyy-mm--dd HH:MM:SS 格式。否则它会插入 NULL 值。在 csv 文件中选择日期整列并右键单击它。单击格式单元格并选择右侧的“日期”列,然后选择“自定义”。然后您可以看到格式 'yyyy/mm/dd' 将其更改为 'yyyy-mm--dd HH:MM:SS' 。使用 csv 文件左上角的格式刷对所有日期列执行相同操作。我猜这应该可以解决你的问题。

【讨论】:

    【解决方案3】:

    您可以在创建表时在日期列上使用NOT NULL 跳过无效的空日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2015-03-11
      • 2020-04-18
      • 2021-10-02
      • 1970-01-01
      • 2012-06-16
      相关资源
      最近更新 更多