比如说a表中的a1字段,数据是2009:2008:2007,
我想查询到2008和2007,应该怎么查呢?

解决方案 »

  1.   


    select substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;
      

  2.   

    要在报表里这么弄,没办法,只能用sql实现
      

  3.   

    不好意思,忘了说明,冒号左右的字符串长度是不固定的,也可能是20092008:20092831203:2103912831203
    有没有那种像java中的split方法,如果用substr能取到':'位置的这种索引方法也行。
      

  4.   

    10g以上的话,用正则很好和处理SELECT regexp_replace('20092008:20092831203:2103912831203', '(\d+):(\d+):(\d+)', '\2 \3')
      FROM dual;
      

  5.   

    instr,substr 配合使用即可给你一个规范化IP地址的例子:
    SQL> SELECT LPAD(SUBSTR('&&IP',1,INSTR('&&IP','.',1)-1),3,'0') || '.'
      2  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,1)+1,INSTR('&&IP','.',1,2)-INSTR('&&IP','.',1,1)-1),3,'0') || '.'
      3  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,2)+1,INSTR('&&IP','.',1,3)-INSTR('&&IP','.',1,2)-1),3,'0') || '.'
      4  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,3)+1),3,'0')
      5  AS IP
      6  FROM DUAL;
    输入 ip 的值:  202.1.0.35IP
    ---------------
    202.001.000.035
      

  6.   

    你只要从第一个冒号后面开始取即可?这个就简单了 :
    select substr(your_col,instr(your_col,':')+1) from your_tab
      

  7.   

    FYI: 问题14: http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html
      

  8.   


    SQL> SELECT LPAD(SUBSTR('&&IP',1,INSTR('&&IP','.',1)-1),3,'0') || '.'
      2  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,1)+1,INSTR('&&IP','.',1,2)-INSTR('&&IP','.',1,1)-1),3,'0') || '.'
      3  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,2)+1,INSTR('&&IP','.',1,3)-INSTR('&&IP','.',1,2)-1),3,'0') || '.'
      4  || LPAD(SUBSTR('&&IP',INSTR('&&IP','.',1,3)+1),3,'0')
      5  AS IP
      6  FROM DUAL;
      

  9.   

    select substr('2009:2008:2007',6,4),substr('2009:2008:2007',11,4) from dual;
      

  10.   

    如果是有限次數的話,可以用substr instr來完成 
    instr從未端查起