兩個數字字串相加產生新的字串

來源:互聯網
上載者:User

/*
--在函數裡不能用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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.