Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 导入两列并基于不同的分隔符和第一列将第二列划分为许多列和行_Mysql_Sql - Fatal编程技术网

Mysql 导入两列并基于不同的分隔符和第一列将第二列划分为许多列和行

Mysql 导入两列并基于不同的分隔符和第一列将第二列划分为许多列和行,mysql,sql,Mysql,Sql,这是一个艰巨的挑战,我不确定使用MYSQL是否可以做到这一点 假设我有一个有3列的表 --------------------------------------------------- | gt3 | sv | 12.1//1.3//4.5///3.3//3.3//3.4 | | gt2 | sd | 13.4//13//12.22///5.5//5.1//5.7 | | gt1 | eer | 12//33

这是一个艰巨的挑战,我不确定使用MYSQL是否可以做到这一点

假设我有一个有3列的表

---------------------------------------------------
| gt3  | sv  | 12.1//1.3//4.5///3.3//3.3//3.4      |
| gt2  | sd  | 13.4//13//12.22///5.5//5.1//5.7     |
| gt1  | eer | 12//33                              |
我正在尝试使用Dbvisualizer将此表导入我的数据库,它应该是这样的:

-------------------------------
| gt3  | 12.1  | 1.3   |  4.5  |
| gt3  | 3.3   | 3.3   |  3.4  |   
| gt2  | 13.4  | 13    | 12.22 |
| gt2  | 5.5   | 5.1   | 5.7   |
| gt1  | 12    | 33    |       |
因此,我忽略第二列,并基于第一列拆分第三列,因此//是一个新列,//是一个新行

我试过这个

LOAD DATA LOCAL INFILE 'C:\\Users\\youse\\fakemas.txt'
INTO TABLE SA2
FIELDS TERMINATED BY '//'
LINES TERMINATED BY '///'

这只是如我所愿正确拆分第三列,但不使用第一列。

如果您知道可以表示多少行,可以执行以下操作:

select col1, 
       substring_index(rowvals, '//', 1),
       (case when rowvalues like '%//%' 
             then substring_index(substring_index(rowvals, '//', 2), '//', -1)
        end),
       (case when rowvalues like '%//%//%' 
             then substring_index(rowvals, '//', -1)
        end)
from (select t.*,
             substring_index(substring_index(col3, '///', n.n), '///', -1) as rowvals
      from t join
           (select 1 as n union all select 2) n
           on col3 like concat('%', repeat('///%', n.n - 1))
     ) t

如果您知道可以表示多少行,您可以:

select col1, 
       substring_index(rowvals, '//', 1),
       (case when rowvalues like '%//%' 
             then substring_index(substring_index(rowvals, '//', 2), '//', -1)
        end),
       (case when rowvalues like '%//%//%' 
             then substring_index(rowvals, '//', -1)
        end)
from (select t.*,
             substring_index(substring_index(col3, '///', n.n), '///', -1) as rowvals
      from t join
           (select 1 as n union all select 2) n
           on col3 like concat('%', repeat('///%', n.n - 1))
     ) t

看起来很简单-查找字符串函数INSTR(或LOCATE)和SUBSTRING。您可能需要条件检查。我不理解数据集和结果集之间的关系。请参阅看起来非常简单-查找字符串函数INSTR(或LOCATE)和SUBSTRING。您可能需要条件检查。我不理解数据集和结果集之间的关系。看见