RT,如何截取特定字符中间的内容 比如 湖南//张三//到此一游如何截取出 // 之间的 张三请各位大大赐教 谢谢

解决方案 »

  1.   


    SQL> 
    SQL> ----方法一
    SQL> select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual
      2  ;RTRIM(LTRIM(REGEXP_SUBSTR('湖?
    ------------------------------
    张三SQL> 
    SQL> ----方法二
    SQL> select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual
      2  ;REGEXP_REPLACE('湖南//张三//到
    ------------------------------
    张三SQL> 
    SQL> ------方法三
    SQL> select s
      2    from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s,
      3                 rownum rn
      4            from dual
      5          connect by rownum <= 3)
      6   where rn = 2
      7  ;S
    ------------------------------------------------
    张三SQL> 
      

  2.   


    ----方法一
    select rtrim(ltrim(regexp_substr('湖南//张三//到此一游','//.*//'),'//'),'//') from dual
    ----方法二
    select regexp_replace('湖南//张三//到此一游','(.*//)(.*)(//.*)','\2') from dual
    ------方法三
    select s
      from (select regexp_substr('湖南//张三//到此一游', '[^//]+', 1, rownum) s,
                   rownum rn
              from dual
            connect by rownum <= 3)
     where rn = 2
      

  3.   


    在9i下好像用不了哦,regexp_replace无效标识符
      

  4.   


    ------那就是使用instr和substr
    SQL> 
    SQL> with tab as
      2  (
      3    select '湖南//张三//到此一游' name from dual
      4  )
      5  select ltrim(substr(name,
      6                instr(name, '//', 1,1),
      7                instr(name, '//',1, 2) - instr(name, '//', 1, 1)),'//')
      8    from tab
      9  ;LTRIM(SUBSTR(NAME,INSTR(NAME,'
    ------------------------------
    张三SQL> 
      

  5.   


    --这是一个  多的话你就写个循环就可以了
     
    SQL> 
    SQL> select substr('湖南//张三//到此一游',instr('湖南//张三//到此一游','//',1)+2,instr('湖南//张三//到此一游','//',1,2)-instr('湖南//张三//到此一游','//',1,1)-2)
      2  from dual
      3  /
     
    SUBSTR('湖南//张三//到此一游',
    ------------------------------
    张三
      

  6.   


    --给个差不多的例子
    with tb as(
    select '11;22;3323;abc;ddd' id from dual)
    select
    substr(';'||id||';',instr(';'||id||';',';',1,rownum)+1,
            instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum)-1) newid,
    instr(';'||id||';',';',1,rownum)col1,  --';'rownum次出现的位置
    instr(';'||id||';',';',1,rownum+1)col2, --';'rownum+1次出现的位置
    instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum) col3 --要截取的长度
    from tb
    connect by rownum <= length(';'||id||';')
         - length(replace(';'||id||';', ';', ''))-1
    NEWID                                          COL1       COL2       COL3
    ---------------------------------------- ---------- ---------- ----------
    11                                                1          4          3
    22                                                4          7          3
    3323                                              7         12          5
    abc                                              12         16          4
    ddd                                              16         20          4