我试图将.csv文件中的数据加载到我的数据库中。问题是," maxSpieler"保存为字符串,但我想将其保存为int。我知道我可以用某种脚本更改.csv文件中的值,但我想用SQL来解决这个问题。这是我到目前为止所尝试的,"问题"从第34行开始:SET maxSpieler ="
我的加载数据查询方法:
LOAD DATA LOCAL INFILE 'C:\\Users\\schmidmath\\Documents\\s.csv'
INTO TABLE spiele
FIELDS TERMINATED BY ';'
ignore 1 rows
(ID_Spiel, name,dauer,@var,@datum,hersteller_id)
SET maxSpieler =
CASE
WHEN @var = "Eins" THEN maxSpieler = 1
WHEN @var = "Zwei" THEN maxSpieler = 2
WHEN @var = "Drei" THEN maxSpieler = 3
WHEN @var = "Vier" THEN maxSpieler = 4
WHEN @var = "Fünf" THEN maxSpieler = 5
WHEN @var = "Sechs" THEN maxSpieler = 6
END
WHERE maxSpieler IN ('Eins', 'Zwei', 'Drei', 'Vier', 'Fünf', 'Sechs')
SET erscheinungsdatum = STR_TO_DATE(@datum,'%d.%m.%Y')
.csv文件:
ID;Name;Dauer in Minuten;Anzahl Spieler;Erscheinungsdatum;Hersteller_ID
1;Reversi;30;Fünf;01.12.1893;3
2;Vier gewinnt;10;Zwei;31.07.1974;1
3;HeroQuest ;90;Fünf;01.05.1989;1
4;Das verrueckte Labyrinth;30;Vier;31.12.1986;
5;Dominion ;40;Vier;01.01.2008;
6;Mensch ärgere dich nicht;30;Vier;01.01.1910;4
7;;20;Sechs;08.06.1995;5
8;Spiel des Lebens;60;Sechs;01.01.1980;1
9;;10;Zwei;31.12.1970;2
10;King Arthur;60;Vier;31.10.2003;3
总结一下: 我需要将.csv文件中的maxSpieler的值(一个字符串)更改为int并将其保存到我的数据库中。
答案 0 :(得分:0)
@MiloBellano: 再次感谢您的回答。如果some1的其他问题有同样的话,这是导入的完整脚本。
DROP table IF exists temp;
create table temp (id int(11) AUTO_INCREMENT PRIMARY KEY,spieler varchar(30));
LOAD DATA LOCAL INFILE 'C:\\Users\\schmidmath\\Documents\\s.csv'
INTO TABLE temp
CHARACTER SET latin1
FIELDS TERMINATED BY ';'
ignore 1 rows
(id, @dummy,@dummy1,spieler,@dummy2,@dummy3);
delete from spiele;
LOAD DATA LOCAL INFILE 'C:\\Users\\schmidmath\\Documents\\s.csv'
INTO TABLE spiele
CHARACTER SET latin1
FIELDS TERMINATED BY ';'
ignore 1 rows
(ID_Spiel, name,dauer,@dummy,@datum,hersteller_id)
SET erscheinungsdatum = STR_TO_DATE(@datum,'%d.%m.%Y'),
maxSpieler = 0;
DROP procedure IF exists test;
DELIMITER $$
CREATE DEFINER='root'@'localhost' PROCEDURE test ()
BEGIN
DECLARE val1 int(11);
DECLARE val2 varchar(30);
DECLARE done INT DEFAULT FALSE;
DECLARE maxCursor CURSOR FOR SELECT id, spieler FROM ictcampus.temp;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN maxCursor;
read_loop: LOOP
FETCH maxCursor INTO val1, val2;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE spiele SET maxSpieler=
CASE
WHEN val2 = "Eins" THEN 1
WHEN val2 = "Zwei" THEN 2
WHEN val2 = "Drei" THEN 3
WHEN val2 = "Vier" THEN 4
WHEN val2 = "Fünf" THEN 5
WHEN val2 = "Sechs" THEN 6
ELSE 0
END
WHERE ID_Spiel = val1;
END LOOP;
CLOSE maxCursor;
END$$
DELIMITER ;
CALL test;
drop table temp;
select * from spiele;