MySQL从txt文件导入浮点值

时间:2018-08-12 12:31:29

标签: mysql import

我从Oracle数据库中将整个表导出,并将所有值都导出到txt文件中-一列包含浮点值,格式为' 1,5 '或' 0,25 < / strong>”或“ 0,75 ”,等等(=工作时间)。 我连接了mariadb数据库,试图将txt文件导入到我在mariadb数据库中创建的新表中。

我的显示创建表在表' working_hours '中显示了此表,其中包含浮点值:

CREATE TABLE work (working_hours FLOAT)engine=innodb default charset=utf8 
collate=utf8_bin;

导入如下:

LOAD DATA LOCAL INFILE '/var/www/foldername/import.txt' INTO TABLE work 
CHARACTER SET latin1 FIELDS TERMINATED BY '\t' LINES TERMINATED BY 
';\n'(working_hours);

导入将不会存储浮点值,但会切断整数旁边的所有内容。因此,“ 1,5”将被存储为“ 1”,“ 0,25”将被存储为“ 0”,依此类推。 我想保留格式'n,m'而不是'n.m',我想使用浮点值来计算(每月多少工作时间?) 当我也使用VARCHAR时也可以计算总和吗? 我在互联网上找不到任何可行的解决方案,在将float值转换为varchar之前,我想知道在我的情况下这是否有意义。

感谢您的建议和帮助!

2 个答案:

答案 0 :(得分:1)

MySQL不支持,作为十进制分隔符。

https://dev.mysql.com/doc/refman/8.0/en/number-literals.html说:

  

数字可能包括。作为小数点分隔符。

如果要使用数字数据类型或计算总和或其他算术表达式,则必须使用.

答案 1 :(得分:1)

正如@BillKarwin指出的那样,MySQL不支持,作为十进制分隔符。因此,要将数字存储在数据库中,您需要对其进行转换。几乎可以肯定这是必要的,因为对存储为VARCHAR的浮点数进行比较不一定有效-在字符串比较中,'9'为> '19'

执行此操作最简单的方法可能是将数据读取到临时表中,然后将其复制到work表中,然后将其转换为浮动状态。您可以通过以下方式做到这一点:

CREATE TEMPORARY TABLE w1 (working_hours VARCHAR(20));
LOAD DATA LOCAL INFILE '/var/www/foldername/import.txt' INTO TABLE w1
   CHARACTER SET latin1 FIELDS TERMINATED BY '\t' LINES TERMINATED BY 
   ';\n'(working_hours);
INSERT INTO work SELECT 0.0 + REPLACE(working_hours, ',', '.') FROM w1;
DROP TABLE w1

通过对,进行反向替换,即始终可以将包含SELECT的值显示为小数分隔符。

SELECT REPLACE(working_hours, '.', ',') AS working_hours