Как изменить значения из CSV в SQL с помощью switch-case

0

Я пытаюсь загрузить данные из CSV файла в свой db. Проблема в том, что числа "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

Моя структура таблицы: Изображение 174551

Чтобы подвести итог: мне нужно изменить значение maxSpieler в моем CSV файле, который является строкой, в int и сохранить его в моей базе данных.

Теги:
csv
switch-statement

1 ответ

0

@MiloBellano: Еще раз спасибо за ваш ответ. Вот мой полный скрипт для импорта, если у some1 else такая же проблема.

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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню