很多時候我們都會用到指定長度的流水號,假如產生訂單識別碼規則我們設定為:倉庫編碼+年月日(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多。