现在。我正在将选项从 tableA 迁移到 tableB:
表A
╔═══════════╦══════════════╗
║ id_skills ║ skills ║
╠═══════════╬══════════════╣
║ 1 ║ Java, Python ║
║ 2 ║ JavaScript ║
║ 3 ║ Ruby, Java ║
║ 4 ║ Python, C# ║
║ 5 ║ C++, Ruby ║
╚═══════════╩══════════════╝
表B
╔═══════════╦════════════╗
║ id_skills ║ skills ║
╠═══════════╬════════════╣
║ 1 ║ Java ║
║ 2 ║ JavaScript ║
║ 3 ║ Ruby ║
║ 4 ║ C# ║
║ 5 ║ C++ ║
║ 6 ║ Python ║
╚═══════════╩════════════╝
我试图找到一个 sql 函数,用于取消字符串连接
并且是在脚本中创建所有内容所必需的
我们真的不知道每行中有多少个“,”。
示例:
“Java、Python”
在本例中,分为两行:
-> Java
-> Python
注意:
MySql中没有分割字符串的函数
最佳答案
如果您知道字符串中可能值的最大数量,则可以使用 substring_index()
在查询中执行此操作:
select (@rn := @rn + 1) as id_skills,
substring_index(substring_index(a.skills, ', ', n.n), ', ', -1) as skill
from tableA a join
(select 1 as n union all select 2 union all select 3 union all select 4
) n
on n.n <= 1 + length(a.skills) - length(replace(a.skills, ',', '') cross join
(select @rn := 0) vars;
您只需确保 n
子查询中有足够的值即可。
关于MySql解析,在不知道分割数的情况下分割成几行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28015093/