比如我的表里有这样一个字段:
物品编码 nvarchar(6)编码是由两部分构成:两个字母的前缀,和后面的4位的流水号,比如下面这样aa0001
aa0002
aa0003
bb0001
bb0002
aa0005
....我的问题是:现在我想找到以某个前缀开头的,第一个未被使用的编号,比如上面的例子中,要找aa开头的就是找到aa0004,怎么用sql语句实现?谢谢大家~
物品编码 nvarchar(6)编码是由两部分构成:两个字母的前缀,和后面的4位的流水号,比如下面这样aa0001
aa0002
aa0003
bb0001
bb0002
aa0005
....我的问题是:现在我想找到以某个前缀开头的,第一个未被使用的编号,比如上面的例子中,要找aa开头的就是找到aa0004,怎么用sql语句实现?谢谢大家~
SELECT @Temp=物品编码 FROM 表 WHERE name 物品编码 'aa%' ORDER BY 物品编码 DESC
--@Temp返回aa0003
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' 即可
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)