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

      很多时候我们都会用到指定长度的流水号,假如生成订单编码规则我们设置为:仓库编码+年月日(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多。

转载于:https://www.cnblogs.com/wych/archive/2009/08/06/1540302.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值