现在的位置: 首页 > 综合 > 正文

两个数字字符串相加生成新的字符串

2012年10月29日 ⁄ 综合 ⁄ 共 2158字 ⁄ 字号 评论关闭

/*
--在函数里不能用getdate()类似这样系统函数
--将数字字符进行相加生成新的数字字符串数据,并加上自己相应的前缀,可以用来生成ID号,生成的数字字符串不会越过整形的长度范围

select dbo.CreateDifferentID('MM','0000','45','varchar')  ---生成MM0045

*//*
创建人:Hopewell_Go
引用保留此*/
CREATE FUNCTION CreateDifferentID(@vPreString varchar(50),@vStartString varchar(250),@vSetID varchar(200),@vEditType varchar(20))
RETURNS varchar(250)
AS 
BEGIN
declare @vReturnValue varchar(250)
,@vRemnantString varchar(250)
,@iPreChar int
,@iSetChar int
,@iAddChar int
,@iPreLen int
,@iSetLen int
,@iPrePos int
,@iSetPos int
,@iFeedInBit int
,@iEndLen int
,@vTemp varchar(20)

select @vReturnValue=''
,@vRemnantString=''
,@iPreLen=len(ltrim(rtrim(@vStartString)))
,@iPreChar=null
,@iPrePos=1
,@iAddChar=0
,@iSetLen=len(ltrim(rtrim(@vSetID)))
,@iSetPos=1
,@iFeedInBit=0
,@iEndLen=0
,@vTemp=''
 
--实现字符串的ID,如0000000
if(@vEditType='varchar')  
begin
 if(@iPreLen<@iSetLen)  --进行数据交换,也就是长字符串在前,短字符串在后。
 begin
  select @vTemp=@vStartString
  ,@vStartString=@vSetID
  ,@vSetID=@vTemp
  ,@vTemp=@iPreLen
  ,@iPreLen=@iSetLen
  ,@iSetLen=@vTemp
 end
 while(@iPrePos<=@iPreLen)
 begin
  set @iPreChar=substring(@vStartString,@iPreLen-@iPrePos+1,1)
  if(@iSetPos<=@iSetLen)
  begin
   select @iSetChar=substring(@vSetID,@iSetLen-@iPrePos+1,1)+@iFeedInBit
   ,@iAddChar=@iPreChar+@iSetChar
   ,@iFeedInBit=@iAddChar/10
   ,@vReturnValue=cast(@iAddChar%10 as varchar)+@vReturnValue
   set @iEndLen=@iPrePos
  end
  else
  begin
   if(@iFeedInBit=1)  --有进位时就要加入进位
   begin
    select @iAddChar=@iPreChar+@iFeedInBit
    ,@iFeedInBit=@iAddChar/10
    ,@vReturnValue=cast(@iAddChar%10 as varchar)+@vReturnValue
    if(@iFeedInBit=0)
    begin
     set @iEndLen=@iPrePos
     break
    end
    else if(@iPrePos=@iPreLen)  --处理最后一位进位
    begin
     select @vReturnValue='1'+@vReturnValue
     ,@iEndLen=@iPreLen
     break
    end
   end
   else --没有进位就结束
   begin
    break
   end
  end
  select @iPrePos=@iPrePos+1
  ,@iSetPos=@iSetPos+1
 end
 select @vRemnantString=left(@vStartString,@iPreLen-@iEndLen)
 ,@vReturnValue=@vPreString+@vRemnantString+@vReturnValue
end
--return(@iFeedInBit)
/*
else if(@vEditType='year')
begin

 select @vReturnValue=dbo.CreateDifferentID(@vPreString,@vStartString ,@vSetID,'varchar')
 ,@vReturnValue=replace(@vReturnValue,@vPreString,@vPreString+'05')
end
*/
return (@vReturnValue)

END

 

抱歉!评论已关闭.