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。逗号之间的长度可能不同