首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成此范围内的收货号

生成此范围内的收货号
EN

Stack Overflow用户
提问于 2009-12-22 02:50:12
回答 4查看 1.5K关注 0票数 1

如何在以下范围内生成唯一的收据编号: GA00000-GZ99999?我不允许使用'I‘和'O’字母,因此GI00000-GI99999和GO00000-GO99999将被排除。

理想情况下,我希望用T-SQL创建它,但也可以用VB.Net创建它。这个数字将存储在SQL中,我可以在生成下一个数字之前访问它。它们不一定是连续的。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-22 03:52:24

我决定这样做:

代码语言:javascript
复制
CREATE FUNCTION [dbo].[fn_generateReceiptNumber]() 
RETURNS NCHAR(7)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result NCHAR(7);   
    DECLARE @prefix NCHAR(1);
    DECLARE @suffix INT;
    DECLARE @currentMax NCHAR(7);

    SELECT @currentMax = MAX(ISNULL(fp.CustomReceiptNo, 'GA00001')) FROM dbo.FinPayment fp;

    SELECT @prefix = SUBSTRING(@currentMax,2,1);
    SELECT @suffix = CAST(SUBSTRING(@currentMax,3,7) AS INT);

    IF((@suffix + 1) > 99999)
    BEGIN
        SELECT @suffix = 0;
    END
    ELSE
    BEGIN
        SELECT @suffix = @suffix + 1;
    END

    IF(@suffix = 0)
    BEGIN
        IF(@prefix = 'Z')
        BEGIN
            RETURN -1;
        END
        ELSE
        BEGIN
            IF(NCHAR(UNICODE(@prefix)+1) IN ('I', 'O'))
            BEGIN
                SELECT @prefix = NCHAR(UNICODE(@prefix)+2);
            END
            ELSE
            BEGIN
                SELECT @prefix = NCHAR(UNICODE(@prefix)+1);
            END
        END
    END

    -- Return the result of the function
    SELECT @result = NCHAR(71) + @prefix + CAST(RIGHT('00000' + RTRIM(@suffix), 5) AS NCHAR(5));
    RETURN @result;

END
GO

感谢大家的投入。史蒂夫。

票数 1
EN

Stack Overflow用户

发布于 2009-12-22 02:59:37

创建允许作为第一个数字的所有字符的array

对于任何数字收据id n,收据代码将是G + array[n/1000000] + n % 1000000

票数 2
EN

Stack Overflow用户

发布于 2009-12-22 02:56:18

保留一个后缀指针。当索引折回超过99999时,递增它。检查你的特殊情况和疲惫(例如Z)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1941886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档