mysql - 将固定宽度、空格分隔的 .txt 文件加载到 mySQL 中

标签 mysql file-io load local

我有一个 .txt 文件,其中包含一堆格式化数据,如下所示:

...
   1     75175.18     95128.46
   1    790890.89    795829.16
   1    875975.98    880914.25
   8   2137704.37   2162195.53
   8   2167267.27   2375275.28
  10   2375408.74   2763997.33
  14   2764264.26   2804437.77
  15   2804504.50   2881981.98
  16   2882048.72   2887921.25
  16   2993093.09   2998031.36
  19   3004104.10   3008041.37
...

我正在尝试将每一行作为条目加载到数据库中的表中,其中每一列都是不同的字段。我无法让 mySQL 正确分离所有数据。我认为问题在于并非所有数字都用等距的空白量分隔。

这是我迄今为止尝试过的两个查询(我还尝试了这些查询的几种变体):

LOAD DATA LOCAL INFILE 
'/some/Path/segmentation.txt' 
INTO TABLE clip (slideNum, startTime, endTime) 
SET presID = 1;


LOAD DATA LOCAL INFILE 
'/some/Path/segmentation.txt' 
INTO TABLE clip 
FIELDS TERMINATED BY ' ' 
LINES TERMINATED BY '\n'
(slideNum, startTime, endTime) 
SET presID = 1;

有什么想法可以让它发挥作用吗?

最佳答案

这些就是我们所说的“固定宽度”记录,LOAD DATA 不能很好地处理它们。选项:

  1. 首先清理 Excel 中的数据,或者
  2. 将数据加载到只有 1 列的临时表中,将整个文本行插入该列。然后,您可以使用 SUBSTR()TRIM() 将所需的列分割到最终表中。
  3. 或者使用用户变量 (@row),您可以在 LOAD DATA 语句中完成这一切。
LOAD DATA LOCAL INFILE 
'/some/Path/segmentation.txt' 
INTO TABLE clip
(@row)
SET slideNum = TRIM(SUBSTR(@row,1,4)),
    startTime = TRIM(SUBSTR(@row,5,13)),
    endTime = TRIM(SUBSTR(@row,18,13))
;

关于mysql - 将固定宽度、空格分隔的 .txt 文件加载到 mySQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936945/

相关文章:

mysql - 跟踪数据库更改

php - 如何在PHP中读取大文件之前获取总行数

java - 在 Jar 文件中加载类

mysql - Doctrine2 updateSchema 与外键冲突

mysql - 如何删除mysql中第n行之后的每条记录?

MySql 查询 : How to Write Inner Select Join Query

c# - 如何将文件复制到另一个路径?

java - 如何在不修改实际文件的情况下读取 'File'?

jquery - 当通过 jQuery 分配最大高度时,图像不会在页面加载时显示

javascript - jQuery - 在 load() 之后向元素添加功能