LOAD DATA LOCAL INFILE特例

时间:2016-09-19 17:02:24

标签: mysql sql

我有一个CSV文件,其中包含以下内容:

NEW YORK, NYC
LOS ANGELES, LA

然而,有一个特例是

WASHINGTON,DC, DC

因为在华盛顿的情况下有两个逗号,我无法正确地将文件加载到DB,因为该表只有两列。 我不想用java代码检查每行包含多个逗号,并将华盛顿行编辑为“WASHINGTON,DC”,DC。

我想知道有没有办法重写旧的LOAD DATA查询以处理这种特殊情况?

目前不正确的结果:

+--------+--------------+
| value  | mapped_value |
+--------+--------------+
| NEW YORK      | NYC       |
| LOS ANGELES   | LAX       |
| WASHINGTON    | DC        |
+--------+--------------+

预期结果应如下所示:

+--------+--------------+
| value  | mapped_value |
+--------+--------------+
| NEW YORK      | NYC       |
| LOS ANGELES   | LAX       |
| WASHINGTON,DC | DC        |
+--------+--------------+

表格查询:

CREATE TABLE city_map (value varchar(255) , mapped_value varchar(255));

我当前的“LOAD DATA LOCAL INFILE”查询如下:

LOAD DATA LOCAL INFILE '/tmp/city.csv' INTO TABLE city_map FIELDS\n TERMINATED BY ',';

1 个答案:

答案 0 :(得分:1)

你的CSV也应该有双引号的分隔符"封闭你的领域。 CSV中的分隔符不够。

如果您使用文本编辑器打开CSV,则应该看到它们,否则您的CSV无效,因为您的逗号数量超出了所需数量。

LOAD DATA LOCAL INFILE '/tmp/city.csv' INTO TABLE city_map FIELDS TERMINATED BY ',' ENCLOSED BY '"';