[英]How to change values from a .csv in sql using a switch-case
我正在嘗試將數據從.csv文件加載到我的數據庫中。 問題是,“ maxSpieler”的數字保存為字符串,但我想將其保存為int。 我知道我可以使用某種腳本來更改.csv文件中的值,但我想使用SQL來實現。 這是我到目前為止所嘗試的,“問題”始於“ 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並將其保存到我的數據庫中。
@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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.