MySql解析,在不知道分割数的情况下分成几行

时间:2015-01-18 21:37:38

标签: mysql sql

现在。我正在从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没有分割字符串

的功能

1 个答案:

答案 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子查询中有足够的值。