如何使用switch-case更改sql中的.csv值

时间:2017-12-13 09:51:53

标签: mysql sql csv switch-statement

我试图将.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

我的表结构: enter image description here

总结一下: 我需要将.csv文件中的maxSpieler的值(一个字符串)更改为int并将其保存到我的数据库中。

1 个答案:

答案 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;