我在只读数据库上有一个查询,该查询当前向我返回这样的结果。这不是一张桌子。
ID|METRIC
1|"123,456,789"
2|"546,123,789"
有没有一种方法可以从该查询中递归选择,使结果看起来像这样-本质上是将逗号分隔符之间的字符串分成自己的列。理想情况下,例如“选择”-这里的一些东西--- from(-原始查询-);
1|"123|456|789"
2|"546|123|789"
我看到的其他答案会创建我无权执行的视图或表。数据库仅锁定于非易失性选择语句。
答案 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