我即将将一个大型(500 MB)* .csv文件导入MySQL数据库。
我就是这样:
LOAD DATA INFILE '<file>'
REPLACE
INTO TABLE <table-name>
FIELDS
TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES ( #Header
<column-name1>,
<column-name2>,
...
);
我的其中一个coluns有问题(它的数据类型是int) - 我收到错误消息:
错误代码:1366错误的整数值:''表示行
我在* .csv文件中查看了这一行。导致错误的单元格内部只有一个空格(如:...... ;; ...)。
如何告诉SQL忽略此列中的空格?
由于* .csv文件非常大,之后我必须导入更大的文件,我想避免编辑* .csv文件;我正在寻找一个SQL解决方案。
谢谢!
[编辑] 解决方案是:
LOAD DATA INFILE '<file>'
REPLACE
INTO TABLE <table-name>
FIELDS
TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES ( #Header
<column-name1>,
<column-name2>,
@var1 #the variable that causes the problem
...
)
SET <column-name-of-problematic-column> = CASE
WHEN @var1 = ' ' THEN NULL
ELSE @var1
END
;
答案 0 :(得分:4)
像这样添加SET COLUMN:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;
您需要将@ var1 / 100替换为处理'space'的表达式并转换为-Infinity或0或42 ...不确定..
答案 1 :(得分:0)
这个答案最初是由@speendo 作为编辑包含在问题中的;我已将其转换为正确答案。
解决办法是:
LOAD DATA INFILE '<file>'
REPLACE
INTO TABLE <table-name>
FIELDS
TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 LINES ( #Header
<column-name1>,
<column-name2>,
@var1 #the variable that causes the problem
...
)
SET <column-name-of-problematic-column> = CASE
WHEN @var1 = ' ' THEN NULL
ELSE @var1
END
;