ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Server中生成指定长度的流水号

SQL Server中生成指定长度的流水号

原创 Linux操作系统 作者:iSQlServer 时间:2009-08-07 18:08:01 0 删除 编辑
      很多时候我们都会用到指定长度的流水号,假如生成订单编码规则我们设置为:仓库编码+年月日(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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2074044