求教各位大神,现在要取部分信息,信息内容格式如下, >安徽省>合肥市>肥西县>实验小学>一一班,信息中:安徽省是第一级,合肥市是第二级,肥西县是第三级,实验小学是第四级,一一班是第五级,每级之间用符号 > 隔开。现在我想分别取第三级和第四级 内容,如何写脚本? 注 :每级长度不一样。比如第二级可能有的输入 合肥市三个字,也有的输入合肥两个字,不带市。

解决方案 »

  1.   

    select regexp_substr(s,'[^>]+',1,3),regexp_substr(s,'[^>]+',1,4) from 
    (select '>安徽省>合肥市>肥西县>实验小学>一一班' s from dual)
      

  2.   

    select substr(tab,instr(tab,'>',1,3)+1,instr(tab,'>',1,4)-1-instr(tab,'>',1,3)) 第三级,substr(tab,instr(tab,'>',1,4)+1,instr(tab,'>',1,5)-1-instr(tab,'>',1,4)) 第四级 
    from (select '>安徽省>合肥市>肥西县>实验小学>一一班' tab from dual);
      

  3.   

    chengccy给出的查询是正确的,ORACLE的正则表达式可以很容易的解决这个问题。REGEXP_SUBSTR有四个参数,第1个参数就是要解析的字符串,第2个参数是正则表达式,这里[^>]+表示不包含字符“>”连续的字符串,第三个参数是从第几字符开始,这里都是1,就是整个字符串,第4个参数是表示第几个符合条件的正则表达式。
    执行下面的查询可以看到效果。SELECT regexp_substr('>安徽省>合肥市>肥西县>实验小学>一一班', '[^>]+', 1, 1) FROM dual;
    SELECT regexp_substr('>安徽省>合肥市>肥西县>实验小学>一一班', '[^>]+', 1, 2) FROM dual;
    SELECT regexp_substr('>安徽省>合肥市>肥西县>实验小学>一一班', '[^>]+', 1, 3) FROM dual;
    SELECT regexp_substr('>安徽省>合肥市>肥西县>实验小学>一一班', '[^>]+', 1, 4) FROM dual;
    SELECT regexp_substr('>安徽省>合肥市>肥西县>实验小学>一一班', '[^>]+', 1, 5) FROM dual;