SQL Server中生成指定長度的流水號

iSQlServer發表於2009-08-07
      很多時候我們都會用到指定長度的流水號,假如生成訂單編碼規則我們設定為:倉庫編碼+年月日(6位)+當天四位流水號,如倉庫編碼為01日期為2009-08-06的第一個訂單編碼應該為:01200908060001,在這裡指定長度的流水號的生成一般都是在資料庫裡操作,方法可以用下面幾種:

方式一:笨辦法,不夠指定長度的話,前面迴圈加零

CREATE FUNCTION fn_GenerateSerialNumber

(

    @numberValue int, --流水號數值

    @length int --流水號字串指定長度

)

RETURNS varchar(20)

AS

BEGIN

    DECLARE @result varchar(20)

    SET @result = Cast(@numberValue as varchar)

 

    DECLARE @currentLen int

    SET @currentLen = Len(@result)

 

    WHILE(@currentLen < @length)

    BEGIN

       SET @result = '0' + @result

       SET @currentLen = @currentLen + 1

    END

 

    RETURN @result

END

方式二:使用Replace +Str函式

CREATE FUNCTION fn_GenerateSerialNumber2

(

    @numberValue int, --流水號數值

    @length int --流水號字串指定長度

)

RETURNS varchar(20)

AS

BEGIN

    RETURN Replace(Str(@numberValue, @length), ' ', '0')

END

方式三:使用Replicate函式

CREATE FUNCTION fn_GenerateSerialNumber3

(

    @numberValue int, --流水號數值

    @length int --流水號字串指定長度

)

RETURNS varchar(20)

AS

BEGIN

    DECLARE @result varchar(20)

    SET @result = Cast(@numberValue as varchar)

    SET @result = Replicate('0', @length - Len(@result)) + @result

 

    RETURN @result

END

方式四:使用Right + Replicate函式

CREATE FUNCTION fn_GenerateSerialNumber4

(

    @numberValue int, --流水號數值

    @length int --流水號字串指定長度

)

RETURNS varchar(20)

AS

BEGIN

    DECLARE @result varchar(20)

    SET @result = Cast(@numberValue as varchar)

    SET @result = Right(Replicate('0', @length) + @result, @length)

 

    RETURN @result

END

 

另外,對於方式四,還可以考慮

SET @result = Reverse(Substring(Reverse(@result) + Replicate('0', @length), 1, @length))

等很多種辦法,字串函式組合有N多。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-611637/,如需轉載,請註明出處,否則將追究法律責任。

相關文章