我想从一个简单的csv文件中获取数据,并将其放入MySQL表(我已经准备好了)。有些列的值是'NULL'字符串,导入时我可以成功将它们转换为null值。但是,我也希望将不为null的值放入转换公式中,这也可以成功完成。我的问题是我似乎无法同时做这两个事情。也就是说,我想从csv文件中的列中获取值,在导入之前通过公式将其放入,然后取出'NULL'字符串并在MySQL中将其替换为空值。到目前为止,我的代码是这样的:

LOAD DATA INFILE 'C:/Users/Spencer/Desktop/WebProjects/WeatherMan/csvdata/day2/alabama_day2.csv'
INTO TABLE alabama_d
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(primary_id, station_id, @date, @precipitation, @snowfall, @maxtemp, @mintemp)
SET date = str_to_date(@date, '%m/%d/%y'),
precipitation = nullif(@precipitation, 'NULL'),
precipitation = @precipitation/100 * 2.54,
snowfall = nullif(@snowfall, 'NULL'),
snowfall = @snowfall/100 * 2.54,
maxtemp = nullif(@maxtemp, 'NULL'),
maxtemp = @maxtemp/10 * 9/5 + 32,
mintemp = nullif(@mintemp, 'NULL'),
mintemp = @mintemp/10 * 9/5 + 32;


如果我将nullif放在首位,则可以正确导入null值,但数据不会通过公式。如果将公式放在第一位,它们会起作用,但随后不会导入空值。我对如何同时获得两者感到困惑。任何想法表示赞赏。谢谢。

最佳答案

原来我没有使用单行IF语句。现在我的代码可以工作了。它是:

LOAD DATA LOCAL INFILE 'C:/Users/Spencer/Desktop/WebProjects/WeatherMan/csvdata/day2/alabama_day2.csv'
INTO TABLE alabama_d
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(primary_id, station_id, @date, @precipitation, @snowfall, @maxtemp, @mintemp)
SET date = str_to_date(@date, '%m/%d/%y'),
precipitation = if(@precipitation = 'NULL', null, @precipitation/100 * 2.54),
snowfall = if(@snowfall = 'NULL', null, @snowfall/10 * 2.54),
maxtemp = if(@maxtemp = 'NULL', null, @maxtemp/10 * 9/5 + 32),
mintemp = if(@mintemp = 'NULL', null, @mintemp/10 * 9/5 + 32);

07-28 02:48
查看更多