现在。我正在从tableA迁移选项到tableB:
tableA
╔═══════════╦══════════════╗
║ id_skills ║ skills ║
╠═══════════╬══════════════╣
║ 1 ║ Java, Python ║
║ 2 ║ JavaScript ║
║ 3 ║ Ruby, Java ║
║ 4 ║ Python, C# ║
║ 5 ║ C++, Ruby ║
╚═══════════╩══════════════╝
tableB
╔═══════════╦════════════╗
║ id_skills ║ skills ║
╠═══════════╬════════════╣
║ 1 ║ Java ║
║ 2 ║ JavaScript ║
║ 3 ║ Ruby ║
║ 4 ║ C# ║
║ 5 ║ C++ ║
║ 6 ║ Python ║
╚═══════════╩════════════╝
我试图找到一个sql的函数,那就是一个字符串
并且必须在脚本中创建所有内容
我们真的不知道每行会有多少“,”
示例:
"Java, Python"
在这种情况下,分为两行:
- > Java的
- >蟒
Note:
MySql没有分割字符串
答案 0 :(得分:2)
如果您知道字符串中可能值的最大数量,则可以使用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
子查询中有足够的值。