上传csv文件到mysql,其中一列包含多行和“and,

8yparm6h  于 2022-12-27  发布在  Mysql
关注(0)|答案(1)|浏览(126)

我有一个问题上传我的数据到我的mysql数据库。
数据如下所示:
查看ID,用户,文本
典型的行如下所示:

12345,SomeCoolName,"this is my "awsome" comment.
some more text, and dome more.
and some "more""

这应该是我的表中的一行。
我在上传时遇到了问题,因为文本字段中有多行和使用逗号和parantes。有什么建议可以让我处理这个问题吗?
谢谢!
我试过使用一些手册,我发现上传csv文件到数据库,但没有成功。

exdqitrt

exdqitrt1#

演示样本。

必须导入的源CSV内容:

review_id,user,text
123,John,This is
multiline 1, which
contains a comma.
456,Jim,This is
miltiline 2, which contains
commas, 'quote' chars and "double quote" chars.

此数据必须导入到的表:

CREATE TABLE test (review_id INT, user VARCHAR(255), review_text TEXT);

将数据加载到表中的查询:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/test.csv'
INTO TABLE test
FIELDS TERMINATED BY '\0' ENCLOSED BY '' ESCAPED BY ''
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(@line)
SET review_id = (@review_id := CASE WHEN @line REGEXP '^\\d'
                                    THEN SUBSTRING_INDEX(@line, ',', 1)
                                    ELSE @review_id
                                    END
                                    ),
    user =  (@user := CASE WHEN @line REGEXP '^\\d'
                           THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@line, ',', 2), ',', -1)
                           ELSE @user
                           END
                           ),
    review_text = (@review_text := CASE WHEN @line REGEXP '^\\d'
                                        THEN SUBSTRING(@line FROM 2 + LENGTH(SUBSTRING_INDEX(@line, ',', 2)))
                                        ELSE CONCAT_WS(' ', @review_text, @line)
                                        END
                                        );

加载后的表数据状态:
| 查看ID|用户|评论_文本|
| - ------| - ------| - ------|
| 一百二十三|约翰|这是|
| 一百二十三|约翰|这是多行1|
| 一百二十三|约翰|这是多行1,其中包含一个逗号。|
| 四百五十六|占|这是|
| 四百五十六|占|这是米替林2号,含有|
| 四百五十六|占|这是多行2,它包含逗号、"引号"字符和"双引号"字符。|
清算:

DELETE t1
FROM test t1
JOIN test t2 USING (user)
WHERE t1.review_text < t2.review_text;

最终表格数据状态:
| 查看ID|用户|评论_文本|
| - ------| - ------| - ------|
| 一百二十三|约翰|这是多行1,其中包含一个逗号。|
| 四百五十六|占|这是miltiline 2,它包含逗号、"引号"字符和"双引号"字符。|

相关问题