簡體   English   中英

如何使用切換大小寫從sql中的.csv更改值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM