get_nextno

CREATE Function get_nextno(
    @as_no     varchar(20),
    @ai_len    integer)
returns varchar(20)

WITH  ENCRYPTION
AS
begin
    declare @temp_len    integer
    declare @temp_minus  integer
    declare @temp_int    numeric(20,0)
    declare @temp_char   varchar(20)
    declare @temp_one    varchar(1)
    declare @temp_two    varchar(1)
    select  @as_no    = upper(@as_no)
    select  @temp_len = len(@as_no)
    select  @temp_minus = @ai_len - @temp_len
    if @temp_minus > 0
    begin
        select @as_no =  replicate('0',@temp_minus) + @as_no
    end
    else if @temp_minus < 0
    begin
        select @as_no = replicate('0',@ai_len - 1) + '1'
        return @as_no
    end
    if isnumeric(@as_no) = 1
    begin
        select @temp_int   = convert(numeric(20,0),@as_no) + 1
        select @as_no      = convert(varchar,@temp_int)
        select @temp_len   = len(@as_no)
        select @temp_minus = @ai_len - @temp_len   
        if @temp_minus > 0
        begin
            select @as_no =  replicate('0',@temp_minus) + @as_no
            return @as_no
        end
        else if @temp_minus = 0
        begin
            return @as_no
        end
        else
        begin
            select @as_no = 'A' + replicate('0',@ai_len - 1)
            return @as_no
        end
    end
    else
    begin
        select @temp_len = 0
        while @temp_len < @ai_len
        begin
            select @temp_one = substring(@as_no,@ai_len - @temp_len,1)
            if @temp_one = 'Z'
            begin
                select @as_no = left(@as_no,@ai_len - @temp_len - 1) + '0' + right(@as_no,@temp_len)
                select @temp_len = @temp_len + 1           
            end
            else
            begin
                if @temp_one = '9'
                begin
                    select @temp_two = substring(@as_no,@ai_len - @temp_len - 1,1)
                    if isnumeric(@temp_two) = 1
                    begin
                        select @as_no = left(@as_no,@ai_len - @temp_len - 1) + '0' + right(@as_no,@temp_len)
                        select @temp_len = @temp_len + 1
                        continue
                    end
                    else
                    begin
                        select @temp_one = 'A'
                    end
                end
                else
                begin
                    select @temp_int = ascii(@temp_one) + 1
                    select @temp_one = char(@temp_int)   
                end   
                select @as_no = left(@as_no,@ai_len - @temp_len - 1) + @temp_one + right(@as_no,@temp_len)
                return @as_no
            end
        end
    end   
    Return @as_no
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值