比如我的表里有这样一个字段:
物品编码 nvarchar(6)编码是由两部分构成:两个字母的前缀,和后面的4位的流水号,比如下面这样aa0001
aa0002
aa0003
bb0001
bb0002
aa0005
....我的问题是:现在我想找到以某个前缀开头的,第一个未被使用的编号,比如上面的例子中,要找aa开头的就是找到aa0004,怎么用sql语句实现?谢谢大家~

解决方案 »

  1.   

    declaer @Temp nvarchar(6)
    SELECT @Temp=物品编码 FROM 表 WHERE name 物品编码 'aa%' ORDER BY 物品编码 DESC
    --@Temp返回aa0003
      

  2.   

    --建表
    create table test
    (
    aa varchar(8)
    )insert into test select 'aa0001'
    insert into test select 'aa0002'
    insert into test select 'aa0003'
    insert into test select 'bb0001'
    insert into test select 'bb0002'
    insert into test select 'aa0005'--语句
    select left(aa,2),right('0000'+ cast(min(cast(right(aa,4) as int))+1 as varchar),4) as bb from 
    (select aa,bb = isnull((select 0 from test where left(aa,2) = left(t1.aa,2) and cast(right(aa,4) as int) =  cast(right(t1.aa,4) as int) + 1),1)
    from test t1)t2
    where bb = 1
    group by left(aa,2)--结果
    aa 0004
    bb 0003如果楼主想查询的是aa开头的纪录的话,在where条件里加上and left(aa,2) = 'aa' 即可
      

  3.   

    实验成功,先结了再仔细研究,谢谢coolingpipe(冷箫轻笛) 同志!
      

  4.   

    --取出以“aa”开头,最大的物品编码
    declaer @max nvarchar(6)
    SELECT @max=max(物品编码) FROM 表 WHERE 物品编码 like 'aa%'
    declare @next int
    dechare @nextNO nvarchar(6)
    --
    select @next = convert(int,right(@max,8)) + 10000 + 1
    select @nextNO = 'aa'+ right(convert(nvarchar(5),@next),4)