Mysql 导入两列并基于不同的分隔符和第一列将第二列划分为许多列和行
这是一个艰巨的挑战,我不确定使用MYSQL是否可以做到这一点 假设我有一个有3列的表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
---------------------------------------------------
| 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。您可能需要条件检查。我不理解数据集和结果集之间的关系。看见