转换MySQL中的数字字段

时间:2015-10-01 10:41:06

标签: mysql csv decimal

我导入了一个CSV文件,其中特定列具有十进制数字。

在原始Excel文件中(将其保存为CSV之前),该列的第一个数字显示为218,790。当我选择单元格时,数字显示为218790.243077911。

在CSV文件中,数字显示为218790,当我选择单元格时,它是218,790。

当我在mySQL上导入文件并显示我创建的表时,该数字显示为218.000000000。

以下是我使用的代码:

create table Apolo_Test(
Leads decimal (15,9)
);

LOAD DATA LOCAL INFILE 'C:/Users/SCRIPTS/file.csv'
INTO TABLE Apolo_Test
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 7 ROWS
;

我尝试用这个更新格式:

update Apolo_Test set Leads = format(Leads, 10, 'de_DE');

但它不起作用。我之前从未遇到文件有逗号的情况。我猜这是英国版的数字字段。

如果不在Excel中使用任何MACROS,如何才能使它在mySQL上运行?

UPD: 虽然我仔细检查了csv文件和字段,但是我收到了一些警告:

create table Apolo_Test(
Ad_Group varchar(50),
Impacts int,
Leads decimal (10,3)
);

LOAD DATA LOCAL INFILE 'C:/Users/apolo.siskos/Desktop/SCRIPTS/11/Adalyser.csv'
INTO TABLE Apolo_Test
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 7 ROWS
(Ad_Group, Impacts, @Leads)
SET Leads = replace(@Leads, ',', '');
;

alter table Apolo_Test ADD IPL decimal (10,6) after Leads;
update Apolo_Test set IPL=Impacts/Leads;
select * from Apolo_Test;

2 个答案:

答案 0 :(得分:1)

您必须使用以下语法:

LOAD DATA LOCAL INFILE 'C:/path/to/mytable.txt' IGNORE
INTO TABLE mytable
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n'
(int_col, @float_col)
SET float_col = replace(@float_col, ',', '.');

有关详细信息,请参阅here

答案 1 :(得分:1)

千位分隔符在移动数据时无关紧要 - Excel内部值和CSV文件以及MySQL内部值不包含它。只有"格式化"输出包括它。并且您不应该使用格式化输出来移动数字。

注意区域设置,例如de_DE。

德国" 218.790"与英语" 218,790"。

相同

" 218790.243077911"很可能是Excel内部的数字。 " 218790"可能是屏幕上的英语表示;请注意英文千位分隔符。

  

在CSV文件中,数字显示为218790,当我选择单元格时,它是218,790。

你是什​​么意思?也许文件中没有逗号或点,本身?但你的意思是"选择单元格"?

我无法了解如何获得" 218.000000000"没有截断在某个地方。