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

Sqlite3使用分隔符将Select查询返回的字符串列拆分为多个列,sqlite,Sqlite,我有一个只读数据库的查询,当前返回的结果如下。这不是一张桌子 ID|METRIC 1|"123,456,789" 2|"546,123,789" 是否有一种方法可以递归地从该查询中选择,从而使结果如下所示——本质上是将逗号分隔符之间的字符串拆分为它们自己的列。理想情况下,像Select这样的东西——这里的一些东西来自-originalquery- 1|"123|456|789" 2|"546|123|789" 我看到的其他答案是创建视图或表,我没有权限这样做。数据库仅锁定为非易失性s

我有一个只读数据库的查询,当前返回的结果如下。这不是一张桌子

ID|METRIC


1|"123,456,789"
2|"546,123,789"
是否有一种方法可以递归地从该查询中选择,从而使结果如下所示——本质上是将逗号分隔符之间的字符串拆分为它们自己的列。理想情况下,像Select这样的东西——这里的一些东西来自-originalquery-

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

我看到的其他答案是创建视图或表,我没有权限这样做。数据库仅锁定为非易失性select语句

虽然可读性不高,但它很有效:

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

请参见

逗号分隔的项目数是否始终为3?@forpas项目数始终为3。逗号之间的长度可能不同