我需要將 CSV 檔案中的資料匯入 MySQL/MariaDB。以下是資料示例:
01.01.2021 00:15;0,000000;W;123,000000;W;9,000000;W;0,000000;W;9,000000;W
01.01.2021 00:30;0,000000;W;126,000000;W;9,000000;W;0,000000;W;9,000000;W
01.01.2021 00:45;0,000000;W;119,000000;W;6,000000;W;0,000000;W;6,000000;W
我想使用 Fields Nr。1, 4, 6. 第一列的Date需要轉換成SQL datetime。我管理了這一切。但是在將第 4 和第 6 值轉換為 Int (或浮點數,如果有人會在測量中添加小數)時,我被卡住了。
我當前運行良好的代碼是:
LOAD DATA LOCAL INFILE '/tmp/eam_energy.csv'
INTO TABLE grafana.elec_eam_delivered
FIELDS OPTIONALLY ENCLOSED BY '"'
TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 18 ROWS
(@datetime, @dummy, @dummy, active_power, @dummy, reactive_power, @dummy, @dummy, @dummy, @dummy, @dummy)
SET datetime = STR_TO_DATE(@datetime, '%d.%m.%Y %H:%i');
active_power并且reactive_power是架構中的整數。匯入時,值會在“,”(這是德國小數分隔符)處剪切。但我收到警告SHOW WARNINGS:
警告 | 第1265章 第 32 行的“reactive_power”列的資料被截斷
我希望匯入作業沒有任何警告。如何將 轉換123,000000為123或123.000000?
提前致謝。
uj5u.com熱心網友回復:
您也可以像這樣通過匯入直接進行轉換:
LOAD DATA LOCAL INFILE '/tmp/eam_energy.csv'
INTO TABLE grafana.elec_eam_delivered
FIELDS OPTIONALLY ENCLOSED BY '"'
TERMINATED BY ';'
LINES TERMINATED BY '\n'
IGNORE 18 ROWS
(@datetime, @dummy, @dummy, @active_power, @dummy, @reactive_power, @dummy, @dummy, @dummy, @dummy, @dummy)
SET DATETIME = STR_TO_DATE(@datetime, '%d.%m.%Y %H:%i'),
SET active_power = SUBSTRING_INDEX(@active_power,',',1),
SET reactive_power = SUBSTRING_INDEX(@reactive_power,',',1);
uj5u.com熱心網友回復:
更改和的架構reactive_power并active_power匯入VARCHAR(255)您的檔案。然后將 ',' 替換為 '.':
UPDATE
grafana.elec_eam_delivered
SET
reactive_power = REPLACE(reactive_power, ',', '.'),
active_power = REPLACE(active_power, ',', '.')
然后將架構更改為active_powerandreactive_power到INTor FLOAT(您的選擇)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430924.html
