Sqlite3使用选择符将选择查询返回的字符串列拆分为多个列

时间:2019-02-04 19:41:32

标签: sqlite

我在只读数据库上有一个查询,该查询当前向我返回这样的结果。这不是一张桌子。

ID|METRIC


1|"123,456,789"
2|"546,123,789"

有没有一种方法可以从该查询中递归选择,使结果看起来像这样-本质上是将逗号分隔符之间的字符串分成自己的列。理想情况下,例如“选择”-这里的一些东西--- from(-原始查询-);

 1|"123|456|789"
 2|"546|123|789"

我看到的其他答案会创建我无权执行的视图或表。数据库仅锁定于非易失性选择语句。

1 个答案:

答案 0 :(得分:1)

可读性不强,但可以使用:

select id,
  substr(metric, 1, instr(metric, ',') - 1) col1,
  substr(substr(metric, length(substr(metric, 1, instr(metric, ',') - 1)) + 2), 1, instr(substr(metric, length(substr(metric, 1, instr(metric, ',') - 1)) + 2), ',') - 1) col2,
  substr(substr(metric, length(substr(metric, 1, instr(metric, ',') - 1)) + 2), instr(substr(metric, length(substr(metric, 1, instr(metric, ',') - 1)) + 2), ',') + 1) col2
from tablename 


使用CTE:

with qry as (
  select 
    id, 
    substr(metric, 1, instr(metric, ',') - 1) col1, 
    substr(metric, instr(metric, ',') + 1) right1 from tablename
)

select 
  id, 
  col1, 
  substr(right1, 1, instr(right1, ',') - 1) col2, 
  substr(right1, instr(right1, ',') + 1) col3
from qry q

请参见demo