WangZWang的专栏

先来欢迎各位的到来 :)

另类获得连续号码的求法

-- 另类获得连续号码的求法
 
DECLARE @Temp table (sNo varchar(50) primary key)
Insert into @Temp values('DMC060001')
Insert into @Temp values('DMC060002')
Insert into @Temp values('DMC060003')
Insert into @Temp values('DMC060006')
Insert into @Temp values('DMC060007')
Insert into @Temp values('DMC060010')
Insert into @Temp values('DMC060014') 
Insert into @Temp values('DMC060016')
Insert into @Temp values('DMC060017')
Insert into @Temp values('DMC060018')
 
DECLARE @Str varchar(20),          --保存上一字符
        @ResultStr  varchar(8000), --最后返回字符
        @New bit,                  --本次比较的标志
        @Old bit,                  --上一个比较的标志
        @EndStr varchar(20)        --用作最后一次连续的判断

Select @EndStr=max(sNo) from @Temp

update @temp set
    @ResultStr  =case when @ResultStr Is NULL then sNo else @ResultStr end ,
    @New =(case when (Right(sNo, PATINDEX('%[A-Z]%',Reverse(sNo))-1)=
                      Right(@str,PATINDEX('%[A-Z]%',Reverse(@str))-1)+1) then 1 else 0 end),
    @ResultStr  =@ResultStr+(case when (@New=0 and @old=1) then '-'+Right(@str,PATINDEX('%[A-Z]%',Reverse(@str))-1)+','+sNo
                    when (@New=0 and @old=0) then ','+sNo
                    when (sNo=@EndStr) then '-'+right(sNo,PATINDEX('%[A-Z]%',Reverse(sNo))) else '' end), 
    @old=@New, @str=sNo  
Select @ResultStr as [组合字符]

--结果
/*
组合字符
------------------------------------------------------------------------------------
DMC060001-060003,DMC060006-060007,DMC060010,DMC060014,DMC060016-060018
 
*/ 


 上述只是一个简单例子,可以由这种方式而扩展其他类型的。


阅读更多
文章标签: insert table 扩展 null
想对作者说点什么? 我来说一句

QQ申请器QQ申请器QQ申请器

2009年12月23日 106KB 下载

气势另类效果.kx

2015年04月09日 11KB 下载

没有更多推荐了,返回首页

不良信息举报

另类获得连续号码的求法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭