我正在try 将数据导入表.目前我正在努力

LOAD DATA local INFILE "C:/PRINT DAILY DOC_CommaDelimited.txt"
into table daily_doc_report_full
fields terminated by ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 5 LINES;

导入数据如下所示

"   1","SALES DEPT SALES             ","    0"," -285,723","  

当它导入第4个字段中的逗号会扰乱数据导入的方式.

数据应该是这样的

| Line| Description      | today | Month_to_date|
|    1| Sales Dept Sales |   0.00|   -285,723.00|

相反,数据被截断并显示

| Line| Description      | today | Month_to_date|
|    1| Sales Dept Sales |   0.00|       -285.00|

我已经try 了对加载数据本地infile查询的各种更改,比如从ENCLOSED BY '"'中删除OPTIONALLY,但我就是不能让它按预期的方式工作.我使用MYSQL 8.0

推荐答案

MySQL不理解用逗号表示千位分隔符的数字.如果试图将包含逗号的字符串转换为数字,则它将忽略从逗号到结尾的所有字符.

这与LOAD DATA INFILE或括起的引号无关.我们可以用一个简单的CAST()表达式演示同样的问题:

mysql> select cast('-285,723' as decimal);
+-----------------------------+
| cast('-285,723' as decimal) |
+-----------------------------+
|                        -285 |
+-----------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> select cast('-285723' as decimal);
+----------------------------+
| cast('-285723' as decimal) |
+----------------------------+
|                    -285723 |
+----------------------------+

您可以使用LOAD DATA INFILE解决这个问题,方法是先将字符串复制到用户变量,然后从用户变量中删除逗号.

我用MySQL 8.3测试了这一点(它在任何版本的MySQL上都应该是一样的):

mysql> LOAD DATA local INFILE 'c.csv' into table mytable 
  fields terminated by ',' 
  OPTIONALLY ENCLOSED BY '"' 
  (line, description, @today, @month_to_date) 
  set today = replace(@today, ',', ''), 
      month_to_date = replace(@month_to_date, ',', '');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from mytable;
+------+-------------------------------+-------+---------------+
| line | description                   | today | month_to_date |
+------+-------------------------------+-------+---------------+
|    1 | SALES DEPT SALES              |  0.00 |    -285723.00 |
+------+-------------------------------+-------+---------------+

Mysql相关问答推荐

MySQL:一个查询中的SELECT语句,用于从一个表中检索所有数据,并仅从另一个表中检索一个数据

如何在 MySQL 中对同一个表的多个列进行 INNER JOIN

没有 ORDER BY 的查询性能很高,有 ORDER BY 的查询速度慢得像爬行一样

Mysql根据文本语言或行数将列拆分为多列

MySQL - 如何根据单列查找重复行?

当mysql中只有一个索引列时,为什么使用范围条件锁定读取会锁定每条记录?

分别针对每个不同的列 Select 聚合

为什么这个查询需要超过 5 秒才能运行?

SQL从字典中的键获取值

在 PHP 中获取 MySQL 列的总和

默认为空字符串的列

ASP.NET EntityFramework 获取数据库名称

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

什么是全文索引,我应该什么时候使用它?

带有 OuterRef 的简单子查询

如何将 mysqldump 的输出拆分为较小的文件?

当运行 UPDATE ... datetime = NOW();所有更新的行都会有相同的日期/时间吗?

MySQL:唯一字段需要是索引吗?

MySQL更新查询与左连接和分组依据

"SELECT COUNT(*)" 很慢,即使有 where 子句