如果不间隔的话可以这样写,间隔的话就不好处理的,最好是用存储过程或者函数来处理了!
select a+1 b from tt where a+1 not in (select a from tt);

解决方案 »

  1.   

    楼主的a字段如果是number类型的话还好说,varchar的话就麻烦了。
      

  2.   

    to bzszp:
      能不能用to_number转换成数字型?
    to lialin:
      有没有办法在没有任何表的情况下,用一条SQL形成这样的记录集,形如下:
    -----------
    1
    2
    3
    4
    5
    ...
    起始、终止可以指定
    如果可以的话,用NOT IN 就可以把中间未用的序号列出来了
      

  3.   

    不好意思,刚刚网络有问题
    to bzszp:
     如果用to_number(a)转成数字后,如何处理呢?
      

  4.   

    10:59:28 SQL> select * from tt;COL1
    ----------
    001
    003
    004
    008
    010已用时间:  00: 00: 00.16
    10:59:37 SQL> select t1.* from 
    10:59:48   2  (select lpad(rownum,3,'0') id from all_source t where rownum<=(
    10:59:48   3  select max(to_number(ltrim(col1,'0'))) id from tt)) t1,tt
    10:59:48   4  where t1.id=tt.col1(+) and tt.col1 is null;ID
    -------
    002
    005
    006
    007
    009已用时间:  00: 00: 03.66
    10:59:53 SQL> select lpad(max(to_number(ltrim(col1,'0'))),3,'0') id from tt;ID
    -------
    010已用时间:  00: 00: 00.15
      

  5.   

    太好了,谢谢bzszp和lialin两位大侠结贴。。