SDC*_*SDC 16 mysql csv delimiter end-of-line
MySQL有一个很好的CSV导入功能LOAD DATA INFILE.
我有一个大型数据集,需要定期从CSV导入,所以这个功能正是我需要的.我有一个可以完美导入数据的工作脚本.
.....除了......我事先并不知道终端终结器是什么.
我的SQL代码目前看起来像这样:
LOAD DATA INFILE '{fileName}'
INTO TABLE {importTable}
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
( {fieldList} );
Run Code Online (Sandbox Code Playgroud)
这适用于某些导入文件.
但是,导入数据来自多个来源.其中一些有\n终结者; 其他人有\r\n.我无法预测我将拥有哪一个.
有没有使用的方式LOAD DATA INFILE来指定,我行可与任一被终止\n或\r\n?我该如何处理?
Dev*_*art 11
您可以将行分隔符指定为'\n',并在加载期间从最后一个字段中删除尾随的'\ r'分隔符.
例如 -
假设我们有'entries.txt'文件.行分隔符为'\ r \n',并且只有在ITEM2 | CLASS3 | DATE2分隔符为'\n' 之后的行之后:
COL1 | COL2 | COL3
ITEM1 | CLASS1 | DATE1
ITEM2 | CLASS3 | DATE2
ITEM3 | CLASS1 | DATE3
ITEM4 | CLASS2 | DATE4
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE语句:
CREATE TABLE entries(
column1 VARCHAR(255) DEFAULT NULL,
column2 VARCHAR(255) DEFAULT NULL,
column3 VARCHAR(255) DEFAULT NULL
)
Run Code Online (Sandbox Code Playgroud)
我们的LOAD DATA INFILE查询:
LOAD DATA INFILE 'entries.txt' INTO TABLE entries
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(column1, column2, @var)
SET column3 = TRIM(TRAILING '\r' FROM @var);
Run Code Online (Sandbox Code Playgroud)
显示结果:
SELECT * FROM entries;
+---------+----------+---------+
| column1 | column2 | column3 |
+---------+----------+---------+
| ITEM1 | CLASS1 | DATE1 |
| ITEM2 | CLASS3 | DATE2 |
| ITEM3 | CLASS1 | DATE3 |
| ITEM4 | CLASS2 | DATE4 |
+---------+----------+---------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21269 次 |
| 最近记录: |