| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3366 人关注过本帖
标题:生成4位流水号
只看楼主 加入收藏
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
生成4位流水号
生成四位流水号(0-9,A-Z)其中去掉I,O
搜索更多相关主题的帖子: 流水号 
2013-03-20 08:50
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
收藏
得分:0 
例如:第一个生成的是1AZZ,下一位生成的就是1B00 再下一位生成的就是:1B01
自己写了一个特别的繁琐,代码量非常的大,请会的人多帮帮忙啊

asp
2013-03-20 10:31
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
收藏
得分:0 

-- 四位序列号

declare @temp varchar(1)--声明一个临时变量存储个位数
declare @first varchar(1)--声明一个临时变量存储十位数
declare @send varchar(1)--声明一个临时变量存储百位数
declare @third varchar(1)--声明一个临时变量存储千位数
declare @tempChar varchar(4)--声明一个临时变量存储流水号

declare @OrderID varchar(4)--四位流水号
set @OrderID='00ZZ'--设置初始值(当然后期做进去的话,要读取判断)
if(isnumeric(right(@OrderID,1))=1)
begin
    if(cast(right(@OrderID,1) as int)<9)--判断最后一位值小于9的情况
    begin
        set  @temp= cast((cast(right(@OrderID,1) as int)+1) as nvarchar)     
    end
    if(cast(right(@OrderID,1) as int)=9)--判断最后一位值等于9的情况
    begin
        set @temp='A'
    end
--打印流水号
set  @tempChar = cast(left(@OrderID,3) as varchar) + @temp
print   @tempChar
end
else
begin   
    if(right(@OrderID,1)='A')--判断最后一位值等于A的情况
    begin
        set @temp = 'B'
    end
    if(right(@OrderID,1) = 'B')--判断最后一位值等于B的情况
    begin
        set @temp = 'C'
    end
    if(right(@OrderID,1) = 'C')--判断最后一位值等于C的情况
    begin
        set @temp = 'D'
    end
    --------------跳过I,O两个字母---------------
    if(right(@OrderID,1) = 'H')--判断最后一位值等于H的情况
    begin
        set @temp = 'J'
    end
    if(right(@OrderID,1) = 'N')--判断最后一位值等于N的情况
    begin
        set @temp = 'P'
    end
        --省略D_Y----------------------
    if(right(@OrderID,1) = 'Z')----------------------------------判断第四位到Z的情况开始
    begin
        set @temp = '0' --设置第四位为'0'
        if(isnumeric(left(right(@OrderID,2),1))=1)-------------判断第三位的值为数字
        begin
            if(cast(left(right(@OrderID,2),1) as int)<9)--判断第三位值小于9的情况
            begin
                set  @first= cast((cast(left(right(@OrderID,2),1) as int)+1) as nvarchar)     
            end
            if(cast(left(right(@OrderID,2),1) as int)=9)--判断第三位值等于9的情况
            begin
                set @first='A'
            end
            --打印流水号
            set  @tempChar = cast(left(@OrderID,2) as varchar) + @first+ '0'
            print   @tempChar            
            return
        end
        else
        begin
            if(right(@OrderID,1)='A')--判断第三位值等于A的情况
            begin
                set @first = 'B'
            end   
             --省略其他的字符    --------------跳过I,O两个字母---------------
        
            ----------判断第三位的字符位Z开始
                if(left(right(@OrderID,2),1) = 'Z')----------------------------------判断第三位到Z的情况开始
                begin
                    set @first = '0' --设置第三位为'0'
                    if(isnumeric(right(left(@OrderID,2),1))=1)-------------判断第二位的值为数字
                    begin
                        if(cast(right(left(@OrderID,2),1) as int)<9)--判断第二位值小于9的情况
                        begin
                            set  @send = cast((cast(right(left(@OrderID,2),1) as int)+1) as nvarchar)     
                        end
                        if(cast(right(left(@OrderID,2),1) as int)=9)--判断第二位值等于9的情况
                        begin
                            set @send = 'A'
                        end
                        --打印流水号
                        set  @tempChar = cast(left(@OrderID,1) as varchar) +@send+ @first+ @temp
                        print   @tempChar   
                        return
                    end
                    else
                    begin
                        if(right(left(@OrderID,2),1)='A')--判断第二位值等于A的情况
                        begin
                            set @first = 'B'   
                        end                        
                         --省略其他的字符    --------------跳过I,O两个字母---------------
                        -----------------------判断第二位字符Z开始
                        
--                        if(right(left(@OrderID,2),1) = 'Z')
--                        begin
--                            set @send = '0' --设置第二位为'0'
--                            if(isnumeric(left(@OrderID,1)=1)-------------判断第一位的值为数字
--                            begin
--                                if(cast(left(@OrderID,1) as int)<9)--判断第一位值小于9的情况
--                                begin
--                                    set  @third = cast(cast(left(@OrderID,1) as int)+1) as nvarchar)     
--                                end
--                                if(cast(left(@OrderID,1) as int)=9)--判断第一位值等于9的情况
--                                begin
--                                    set @third = 'A'
--                                end
--                                --打印流水号
--                                set  @tempChar =@third +@send+ @first+ @temp
--                                print   @tempChar   
--                                return
--                            end
--                            else
--                            begin
--                                if(left(@OrderID,1)='A')--判断第一位值等于A的情况
--                                begin
--                                    set @third = 'B'
--                                end                                    
--                        --打印流水号
--                            set  @tempChar = @third + @send+ @first+ @temp
--                            print   @tempChar
--                            return
--                            end
--                        end
--                        
                        -----------------------判断第二位字符Z结束

                        --打印流水号
                        set  @tempChar = cast(left(@OrderID,2) as varchar) + @first+ @temp
                        print   @tempChar   
                        return
                    end        
                end
            ----------------------------------判断第三位字符结束

            --打印流水号
            set  @tempChar = cast(left(@OrderID,2) as varchar) + @first+ @temp
            print   @tempChar   
            return
        end        
    end
--打印流水号
set  @tempChar = cast(left(@OrderID,3) as varchar) + @temp
print   @tempChar   

end
------------------------我不知道简便的方法,写了这么繁琐的代码,希望高手能帮我看看,怎么样写一个简单的也能实现的方法

asp
2013-03-20 12:36
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
收藏
得分:0 
俺们公司不是专门的软件公司,就我一个编程人员,也不能上扣扣,还指望大神帮忙看看呢。,俺的命咋就这样哭呢,版主

asp
2013-03-20 14:02
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:14 
不懂呢

DO IT YOURSELF !
2013-03-20 14:36
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
收藏
得分:0 
用T-sql写一个生成四位流水号(0-9,A-Z)其中去掉I,O ,就行了,上面我写的比较繁琐,虽然是对的。
其实,我要的是生成18位的流水号,生成这四位的是其中一部分,其他的生成规则还不一样,我是一部分一部分来写的
求大神啊,

asp
2013-03-20 16:22
Aviva_Wang
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:苏州
等 级:贵宾
威 望:26
帖 子:701
专家分:2382
注 册:2013-3-12
收藏
得分:0 
把里面循环的写成一个函数要简单的多,但是,效率方面明显是一样的

asp
2013-03-20 16:59
快速回复:生成4位流水号
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021605 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved