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

标签 mysql sql

现在。我正在将选项从 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/

相关文章:

mysql - 将当前年份作为 MySQL 中的别名

php - 即时通讯试图使其自动插入文本到sql表行的位置

sql - 什么是多键索引?

php - mysql max 从 phpmyadmin 工作,但从 php 脚本给我一个错误的值?

mysql - 查询与另一个表中的条数相等的记录

MySql 查询对行求和并获取最大值

mysql - 如何找到给定数字的范围?

sql - 在 SQL Server 中生成序列,交叉应用性能不佳

sql - 使用单数据库多架构的 ASP.NET MVC Multi-Tenancy 应用程序 : Calling Store Procedures from the application tries to access dbo tables

python - 类型对象 'x' 没有属性过滤器