关闭

另类获得连续号码的求法

695人阅读 评论(0) 收藏 举报

-- 另类获得连续号码的求法
 
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
 
*/ 


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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1947次
    • 积分:41
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档