代码之家  ›  专栏  ›  技术社区  ›  knowads

sqlite3将从select查询返回的字符串列拆分为多个带分隔符的列

  •  0
  • knowads  · 技术社区  · 6 年前

    我有一个关于只读数据库的查询,它当前向我返回这样的结果。这不是桌子。

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

    有没有一种方法可以从查询中递归地选择这样的结果——本质上是将字符串在逗号分隔符之间拆分成它们自己的列。理想情况下,像select——这里的一些东西——来自(——原始查询——);

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   forpas    6 年前

    它不那么可读,但它可以工作:

    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

    推荐文章