mysql 试图导入一个奇怪的格式 csv

标签 mysql excel csv

我有一个 Excel CSV 文件,客户在其中记录发票。为每个供应商创建了一个新列,并将金额放在每列下。

像这样:

ABC Company      Jacks Garage    XYZ Company
123.45            223.22          123.11
423.11             10.22           11.21

等等。我试图猜测如何将其放入两列(供应商、金额)中,以便我可以将该数据导入实际表中。大约有 200 家供应商,因此手动进行剪切和粘贴将永远无法完成。

我能否以某种方式通过循环执行此操作并将信息插入 2 列表中?

最佳答案

我会通过编写一个用几乎任何语言编写的简单脚本来做到这一点,例如Python、PHP、Ruby,甚至 Perl。这些语言中的任何一种都可以轻松读取文本文件,将字段拆分为数组,并以您想要的任何方式将字段发布到数据库中。

或者,您可以在不编写代码的情况下执行此操作,但需要执行以下步骤:

  1. 按原样将 CSV 文件加载到表格中。

    create table invoices_asis (
      rownum serial primary key,
      abc_company_amount numeric(9,2),
      jacks_garage_amount numeric(9,2),
      xyz_company_amount numeric(9,2)
    );
    
    load data infile 'invoices.csv' into table invoices_asis ignore 1 lines
    (abc_company_amount, jacks_garage_amount, xyz_company_amount);
    
  2. 然后将每个给定供应商的所有数据复制到您的(供应商,金额)表中。

    create table invoices (
      invoice_id serial primary key,
      vendor varchar(20),
      amount numeric(9,2)
    );
    
    insert into invoices (vendor, amount)
    select 'ABC Company', abc_company_amount from invoices_asis;
    
    insert into invoices (vendor, amount)
    select 'Jacks Garage', jacks_garage_amount from invoices_asis;
    
    insert into invoices (vendor, amount)
    select 'XYZ Company', xyz_commpany_amount from invoices_asis;
    
  3. 最后,删除原样表。

    drop table invoices_asis;
    

关于mysql 试图导入一个奇怪的格式 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354944/

相关文章:

php - 如何在 Laravel SQL 原始查询中使用括号

php - 从最近插入的数据库条目的特定行获取信息

excel - 将 Excel 文件中的数据加载到 R 或 Octave 中

linux - 使用 Linux shell 命令,如何将通过管道流提供的文件列表编辑为 CSV 格式?

php - PHP select where 与 left join 的性能

php - 查找与多个类别相关的视频 (1 :N Relation) mysql

Excel:Flashfill 偏移水平 + 垂直

excel - 连接字符串和变量以引用另一个变量

php - 我如何在 php 中组织可下载的 csv 文件

python - 用同一字符串中的单个单词替换字符串的一部分