SQL (Maria DB) 将由逗号分隔的字符串拆分为行

Ana*_*Ana 9 sql csv string recursive-query mariadb

我有这个专栏:

names
John, Mary
Joseph
Eleanor, Sophia, Dani
Run Code Online (Sandbox Code Playgroud)

我想要这个输出:

names
John
Mary
Joseph
Eleanor
Sophia
Dani
Run Code Online (Sandbox Code Playgroud)

它应该包括 SUBSTRING_INDEX 函数

Gor*_*off 5

您可以使用递归 CTE:

with recursive cte as (
      select '            ' as name, concat(names, ',') as names, 1 as lev
      from t
      union all
      select substring_index(names, ',', 1),
             substr(names, instr(names, ',') + 2), lev + 1
      from cte
      where names like '%,%'
     )
select name
from cte
where lev > 1;
Run Code Online (Sandbox Code Playgroud)

是一个 db<>fiddle。


GMB*_*GMB 3

一种选项使用递归查询:

 with recursive
    data as (select concat(names, ', ') names from mytable),
    cte as (
        select 
            substring(names, 1, locate(', ', names) - 1) word,
            substring(names, locate(', ', names) + 2) names
        from data
        union all
        select 
            substring(names, 1, locate(', ', names) - 1) word,
            substring(names, locate(', ', names) + 2) names
        from cte
        where locate(', ', names) > 0
    )
select word from cte
Run Code Online (Sandbox Code Playgroud)

DB Fiddle 演示

| 词|
| :------ |
| 约翰 |
| 约瑟夫|
| 埃莉诺|
| 玛丽|
| 索菲亚 |
| 丹妮 |