在工作中遇到一个问题。
需要提取号码段。
例如:数据项是2001,2002,2003,3001,3005,3006,3009,3010,3011,3012,3013,3014
我需要得到的是2001-2003,3001-3006,3009-3014。
请问各位大侠,这个怎么实现吖?

解决方案 »

  1.   

    数据项是2001,2002,2003,3001,3005,3006,3009,3010,3011,3012,3013,3014   表名A ,字段var1建立表B,字段var1,var2 存储2001-2003,3001-3006,3009-3014;然后:select * from a where exisits (select 'T' from b where a.va1<=b.var2 and a.var1>=b.var1)
      

  2.   

    数据是verchar型的
    表A中的字段是数据项是2001,2002,2003,3001,3005,3006,3009,3010,3011,3012,3013,3014
    我需要得到的是2001-2003,3001-3006,3009-3014
    这是一个报表,有规律的,数据都是从小到大的。但是可能是中断的。
      

  3.   

    数据是verchar型的 
    表A中的字段是数据项是2001,2002,2003,3001,3005,3006,3009,3010,3011,3012,3013,3014 
    我需要得到的是2001-2003,3001,3005-3006,3009-3014 
    这是一个报表,有规律的,数据都是从小到大的。但是可能是中断的。
    刚才写错了!
      

  4.   

    这个意思?CREATE TABLE A(COL VARCHAR2(10));
    INSERT INTO A VALUES('2001');
    INSERT INTO A VALUES('2002');
    INSERT INTO A VALUES('2003');
    INSERT INTO A VALUES('3001');
    INSERT INTO A VALUES('3005');
    INSERT INTO A VALUES('3006');
    INSERT INTO A VALUES('3009');
    INSERT INTO A VALUES('3010');
    INSERT INTO A VALUES('3011');
    INSERT INTO A VALUES('3012');
    INSERT INTO A VALUES('3013');
    INSERT INTO A VALUES('3014');
    COMMIT;SELECT DECODE(MAX(COL),MIN(COL),MIN(COL),MIN(COL) || '-' || MAX(COL)) COL FROM(
    SELECT COL,COL-ROWNUM COL1 FROM A ORDER BY COL)
    GROUP BY COL1;COL
    ------------
    2001-2003
    3001
    3005-3006
    3009-3014