Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-获取一列,将其拆分为新列_Sql_Sqlite - Fatal编程技术网

SQL-获取一列,将其拆分为新列

SQL-获取一列,将其拆分为新列,sql,sqlite,Sql,Sqlite,示例表: ID CB CB2 CB3 CB4 CB5 ---- -------- ---- ---- ---- ---- 1 亀 龜 龜 2 竜 龒 注意:每个字符之间用空格分隔。 注:CB中的字符数各不相同 我想将CB列中的每个字符(在第一列之后)移动到它自己的、单独的列中,以便每列中不超过一个字符 像这样: ID CB CB2 CB3 CB4 CB5 ---- ---- --

示例表:

  ID    CB        CB2   CB3   CB4    CB5
  ----  --------  ----  ----  ----  ----
  1     亀 龜 龜
  2     竜 龒 
注意:每个字符之间用空格分隔。 注:CB中的字符数各不相同

我想将CB列中的每个字符(在第一列之后)移动到它自己的、单独的列中,以便每列中不超过一个字符

像这样:

  ID    CB    CB2   CB3   CB4    CB5
  ----  ----  ----  ----  ----  ----
  1      亀    龜    龜
  2      竜    龒
注意:新列名不需要具有示例中所示的格式


(SQLite)

在SQLite中,您可以使用递归CTE来实现这一点。以下内容获取字符:

with recursive cte as (
      select id, substr(cb, 1, instr(cb, ' ') - 1) as chr,
             substr(cb, instr(cb, ' ') + 1) as rest, 1 as lev
      from t
      union all
      select id, substr(rest, 1, instr(rest || ' ', ' ') - 1) as chr,
             substr(rest, instr(rest || ' ', ' ') + 1) as rest, lev + 1 as lev
      from cte
      where rest <> ''
     )
select *
from cte;

这是一个。

您需要具有最大字符数。SQL查询的列数不能可变。@Afh。否,这是一个
select
查询。如上所述,您的表只有两列,因此无法将其放入该表中。您可以将这些行插入另一个表中。很抱歉,我的问题不清楚。我希望能修改一下桌子。如果不能在一次执行中创建列并向其中添加数据,那么我将向表中添加列CB2、CB3、CB4和CB5。下一步是什么?
select id,
       max(case when lev = 1 then chr end) as chr_1,
       max(case when lev = 2 then chr end) as chr_2,
       max(case when lev = 3 then chr end) as chr_3
from cte
group by id;