Как я могу установить Mysql загруженные элементы таблицы в столбце с помощью оператора case когда - PullRequest
1 голос
/ 30 октября 2019

Столбец в CSV-файле, который у меня есть, состоит из 3 букв: c, e и n. Когда я импортирую данные, я хочу, чтобы они изменились на 2, 1 и 0 соответственно. Когда я запускаю CASE WHEN в операторе SET, таблица возвращает только 2 для каждой строки. Что я здесь не так делаю?

load data local infile 'C:\\Scripts\\Storagefile.csv'
into table  infra.storage
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
ignore 1 rows

(status, gasday, gasinstorage, percent_full, net_change, injection, withdrawal, workingstorage, injection_cap, withdrawal_cap, @dummy)

set 
status = (SELECT case
        when status = 'C' then 2
        when status = 'E' then 1
        when status = 'N' then 0 end),  
entity = 'EU',
gasinstorage = gasinstorage * 3.142142,
net_change =  net_change * 3.142142,
injection = injection  * 3.142142,
withdrawal = withdrawal * 3.142142,
workingstorage = workingstorage * 3.142142,
injection_cap = injection_cap  * 3.142142,
withdrawal_cap = withdrawal_cap * 3.142142,
reportdate = current_timestamp()

1 Ответ

1 голос
/ 30 октября 2019

Вот решение SQL для этой цели. Для предварительной обработки ввода необходимо сначала присвоить значение CSV переменной, а затем использовать предложение set.

Это должно быть близко к тому, что вы хотите:

load data local infile 'C:\\Scripts\\Storagefile.csv'
into table infra.storage (
    @status, 
    gasday, 
    @gasinstorage, 
    percent_full, 
    @net_change, 
    @injection, 
    @withdrawal, 
    @workingstorage, 
    @injection_cap, 
    @withdrawal_cap, 
    @dummy
)
fields terminated by ','
enclosed by '"'
lines terminated by '\r\n'
ignore 1 rows
set 
    status = case @status
        when 'C' then 2
        when 'E' then 1
        when 'N' then 0
    end,
    entity = 'EU',          
    gasinstorage = @gasinstorage * 3.142142,
    net_change =  @net_change * 3.142142,
    injection = @injection  * 3.142142,
    withdrawal = @withdrawal * 3.142142,
    workingstorage = @workingstorage * 3.142142,
    injection_cap = @injection_cap  * 3.142142,
    withdrawal_cap = @withdrawal_cap * 3.142142,
    reportdate = current_timestamp()
;
...