需要一个sql语句,查询一个字段中有这样的字符串;
  1 一个字符串xxxx,四个字母
  2 还含有字符串xxxx0T,六个字母(即在1的后边加两个确定的字母0T)
  3 这两个字串的前后顺序不定,字串间用“下划线”分割
  
  例如:kkkk_0B0E0T_0B0E_mmmm   这个例子中的xxxx就是0B0E
请各位大侠赐教

解决方案 »

  1.   

    select * from tb
    where substr(str_column,6,4)=substr(str_column,13,4)
       or substr(str_column,6,4)=substr(str_column,11,4);
      

  2.   

    -- 情况一:kkkk_0B0E0T_0B0E_mmmm
    -- 情况二:kkkk_0B0E_0B0E0T_mmmmselect * from tb
    where substr(str_column,6,4)=substr(str_column,13,4)
       or substr(str_column,6,4)=substr(str_column,11,4);
      

  3.   

    -- 情况一:kkkk_0B0E0T_0B0E_mmmm
    -- 情况二:kkkk_0B0E_0B0E0T_mmmm这里的kkkk可能有多个,mmmm可能多个,而且0B0E_0B0E0T中间可能有其他字符。
    比如kkkk_mmmm_0B0E_uuuu_0B0E0T
      

  4.   

    with test as 
    (
         select 'kkkk_0B0EOT_0B0E_mmmm' a from dual union all 
         select '6540_0B0E_0B0EOT_sdgm' a from dual union all 
         select 'sdfg_OOXXOT_OOXX_678m' a from dual union all 
         select 'sdfg_OONMOT_OOXX_678m' a from dual union all 
         select 'k346_OOXX_OOXXOT_097m' a from dual
    )select A   
    from test where substr(A, instr(A, 'OT_')-4, 4) = substr(A, instr(A, 'OT_') + 3, 4)  -- format like 'kkkk_0B0EOT_0B0E_mmmm'
    union 
    select A   
    from test where substr(A, instr(A, 'OT_')-4, 4) = substr(A, instr(A, 'OT_') -9, 4) -- format like 'kkkk_0B0E_0B0EOT_mmmm'
       
      

  5.   


    6540_0B0E_0B0EOT_sdgm
    k346_OOXX_OOXXOT_097m
    kkkk_0B0EOT_0B0E_mmmm
    sdfg_OOXXOT_OOXX_678m
    忘记给结果了。
      

  6.   

    我不知道你的下划线和字符个数是否确定,如果确定就好办了select substr(regexp_substr(字段,'[[:alnum:]]{4}OT[_]',1,1),1,4) from where 字段 like '%'||substr(regexp_substr(字段,'[[:alnum:]]{4}OT[_]',1,1),1,4)||'_%'
      

  7.   

    上面的有错
    test as 
    (
         select 'kkkk_0B0EOT_0B0E_mmmm' a from dual union all 
         select '6540_0B0E_0B0EOT_sdgm' a from dual union all 
         select 'sdfg_OOXXOT_OOXX_678m' a from dual union all 
         select 'sdfg_OONMOT_OOXX_678m' a from dual union all 
         select 'k346_OOXX_OOXXOT_097m' a from dual
    )select substr(regexp_substr(a,'[[:alnum:]]{4}OT',1,1),1,4) strfrom  testwhere instr(regexp_replace(a,'[[:alnum:]]{4}OT',''),substr(regexp_substr(a,'[[:alnum:]]{4}OT',1,1),1,4))>0如果用个exists ,两层嵌套就能轻松解决,但是都不完美,一定会有个简单的办法,好像想复杂了
      

  8.   

    如果是oracle10g的话,可以采用正则表达式,这样很方便!