将字符串拆分为字符 SQL

Car*_*nso 6 postgresql

如何在 PostgreSQL 中按字符分割字符串并在每个字符后添加新行

例如

num  desc
 1    Hello
 2    Bye

num  desc
 1    H
      e
      l
      l
      o

 2    B
      y 
      e
Run Code Online (Sandbox Code Playgroud)

小智 6

select num, regexp_split_to_table(descr,'')
from the_table
order by num;
Run Code Online (Sandbox Code Playgroud)

SQLFiddle: http: //sqlfiddle.com/#!15/13c00/ 4

然而,不能保证字符的顺序,并且实现这一点有点复杂。

基于埃尔文关于这个问题的回答

select case 
         when row_number() over (partition by id order by rn) = 1 then id 
         else null
       end as id_display, 
       ch_arr[rn]
from (
  select *, 
         generate_subscripts(ch_arr, 1) AS rn
  from (
    select id, 
           regexp_split_to_array(descr,'') as ch_arr
    from data
  ) t1
) t2
order by id, rn;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您只想为每个 id 使用一个字符串,其中字符由换行符分隔,则可以使用以下命令:

select id, 
       array_to_string(regexp_split_to_array(descr,''), chr(10))
from data
order by id
Run Code Online (Sandbox Code Playgroud)