要求 用一条SELECT  语句 实现下面这样的功能!比如一个字符串 v_str:= '北京~上海~成都~天津';
用一条SELECT 语句查询得出结果为:
select 相应的转换(v_str) from dual;北京
上海
成都
天津

解决方案 »

  1.   


    with tab as(
    select '北京~上海~成都~天津'  id from dual
    )
    --上面是测试数据,sql如下:
    select substr('~'||id||'~',instr('~'||id||'~','~',1,level)+1,
              instr('~'||id||'~','~',1,level+1)-instr('~'||id||'~','~',1,level)-1) newid
    from tab
    connect by
    level <= length('~'||id||'~') - length(replace('~'||id||'~', '~', ''))-1--result:NEWID
    ---------
    北京
    上海
    成都
    天津
      

  2.   


    with t as(
    select '~北京~上海~成都~天津~' str from dual
    )
    select substr(str,
                  instr(str, '~', 1, rownum) + 1,
                  instr(str, '~', 1, rownum + 1) - instr(str, '~', 1, rownum) - 1)
      from t connect by rownum<length(str) - length(replace(str, '~', '')) - 1