mysql从txt文件导入浮点值

k4ymrczo  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(375)

我从oracle数据库将一个包含所有值的整个表导出到一个txt文件中—一列包含格式为“1,5”或“0,25”或“0,75”的浮点值,依此类推(=工作时间)。我连接了我的mariadb数据库,试图将txt文件导入我在mariadb数据库中创建的新表中。
我的show create table显示了“working\u 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时,我能用和来计算吗?我在互联网上找不到任何有效的解决方案,在我将浮点值转换为varchar之前,我想知道这在我的情况下是否有意义。
感谢您的建议和帮助!

sqougxex

sqougxex1#

mysql不支持 , 作为小数点分隔符。
https://dev.mysql.com/doc/refman/8.0/en/number-literals.html 说:
数字可能包括。作为小数点分隔符。
你必须使用 . 如果要使用数字数据类型或计算和或其他算术表达式。

uemypmqf

uemypmqf2#

正如@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

相关问题