繁体   English   中英

将csv导入mysql表时如何从内部值中删除双引号

[英]How to remove double quotations from inside value when importing csv into mysql table

我正在使用此处的代码将 csv 导入到 mysql 表中。 它工作得很好,并且 ENCLOSED BY 删除了任何双引号。

我的 csv 值就像 "text text",123,"text text",456,"text text"

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

我刚刚发现一些值在主双引号内有双引号。

像这里的第 3 列 - "text text",123,"text "Special" text",456,"text text"

其中导入为 - text text,123,text "Special text,456,text text

我已经尝试了 ESCAPED BY,如图所示,但无法删除内部双引号。 它在 wordpress 环境中,但上面的代码确实有效(除了我的问题)。

任何想法帮助或想法都会很棒。

尝试像这样转义双引号:

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

您向我们展示了 CSV 文件中的这一行

"text text",123,"text "Special" text",456,"text text"

不幸的是,这不是格式良好的 CSV。 "列值内的字符必须被转义。因此,要使该行格式正确,它必须看起来像其中之一。

"text text",123,"text ""Special"" text",456,"text text"
"text text",123,"text \"Special\" text",456,"text text"

如果这是我的项目,我会回到我得到这个坏 CSV 文件的地方,并尝试得到一个好的。

如果这是不可能的,并且您的文件没有在列值中嵌入任何逗号,您可以尝试使用此加载命令, OPTIONALLY ENCLOSED BY子句。

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

然后你会得到一些字符串值,它们的开头和结尾都带有"字符。你可以通过这样的查询来清理它

UPDATE table SET field = SUBSTRING(field,2) WHERE field LIKE '"%';
UPDATE table SET field = SUBSTRING(field, 1, LENGTH(field)-1) WHERE field LIKE '%"';

第一个查询去掉前导 " 符号,第二个查询去掉尾随符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM