自定义函数 生成报单号
CREATE FUNCTION DVT_CODERULE(@businesscode varchar(30),@countitem int)
RETURNS varchar(255)
AS
BEGIN
-- Declare the return variable here
DECLARE
@prefix varchar(10), --前缀
@dateform varchar(20), --日期项
@countit varchar(20), --计数项
@countlength numeric(4,0), --计算长度
@suffix varchar(10), --后缀
@separatechar varchar(1), --分隔符
@result varchar(255), --返回值
@leng int;
-- 通过业务编码,查询对应的参数
SELECT @prefix=PREFIX,@dateform=[DATEFORMAT],@countlength=COUNTLENGTH,
@suffix=SUFFIX,@separatechar=SEPARATECHAR
from TD_CODERULE where BUSINESSCODE=@businesscode
--拼出计数项与计数长度结合后的字串
select
@leng = convert(int,@countlength) - len(@countitem)
-- select STUFF(REPLICATE(0,8),6,3,'555') = 00000555
--STUFF() 用另一子串替换字符串指定位置、长度的子串
--REPLICATE (character_expression int)返回一个重复character_expression 指定次数的字符串
select @countit = STUFF(REPLICATE(0,convert(int,@countlength)),@leng+1,len(@countitem),convert(varchar(20),@countitem))
--日期项
if(@dateform = 'YYYYMMDD')
SELECT @dateform = CONVERT(varchar(10), GETDATE(), 112)
if(@dateform = 'YYYYMM')
select @dateform = LEFT(CONVERT(varchar(10), GETDATE(), 112),6)
if(@dateform = 'YYYY')
select @dateform = LEFT(CONVERT(varchar(10), GETDATE(), 112),4)
--拼接
select @result = @prefix + @separatechar + @dateform + @separatechar + @countit + @separatechar + @suffix
RETURN @result;
END
GO

浙公网安备 33010602011771号