SQL将值拆分为多行

我有表:

id | name    

1 | a,b,c

2 | b

我想要这样的输出:

id | name    

1 | a

1 | b

1 | c

2 | b

回答:

如果可以创建一个数字表,其中包含从1到要拆分的最大字段的数字,则可以使用以下解决方案:

select

tablename.id,

SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name

from

numbers inner join tablename

on CHAR_LENGTH(tablename.name)

-CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1

order by

id, n

请看这里的小提琴。

如果无法创建表,则解决方案可以是:

select

tablename.id,

SUBSTRING_INDEX(SUBSTRING_INDEX(tablename.name, ',', numbers.n), ',', -1) name

from

(select 1 n union all

select 2 union all select 3 union all

select 4 union all select 5) numbers INNER JOIN tablename

on CHAR_LENGTH(tablename.name)

-CHAR_LENGTH(REPLACE(tablename.name, ',', ''))>=numbers.n-1

order by

id, n

以上是 SQL将值拆分为多行 的全部内容, 来源链接: utcz.com/qa/422327.html

回到顶部