我想编写一个自动生成单号的函数?要求:格式为日期+单号 如:今天是2004-07-02
第一张单的话单号为200407020001,第二张单为:200407020002,如果日期变为是2004-07-03的第一张单为:200407030001:每天的单号都从0001开始累加。如何实现??

解决方案 »

  1.   

    要求:格式为日期+单号 
    -------- 你这个格式 最好确定下来... 为 yyyy-mm-dd格式最好...
    如果确定下来了..
    你就去数据库获取 已经存在的当天的单号的最大值 如果有
    然后获取 最大值 + 1 就是当前的单号. 如果没有 就定为0001但是如果这个单号是主键的话 你需要在保存的时候校验此单号是否存在 如果存在你需要 再+1以重试... 这样是比较简单的处理方法...
      

  2.   

    stringreplace删除'-'
    然后加上编号
      

  3.   

    USE yygl
    GO
    IF EXISTS (SELECT * 
       FROM   sysobjects 
       WHERE  name = 'Createrkdh')
    DROP FUNCTION Createrkdh
    GOCREATE       FUNCTION Createrkdh()
    RETURNS varchar(4)  AS  
    BEGIN 
       declare @bat varchar(16)
       declare @tch varchar(10)
       declare @oct varchar(9)
       declare @num int
       set @oct = ''
       --取当前“订单表”中的最大订单号
       select  @bat = isNull(max(rkdh),'0000000000000000') from Ykrkd
       set @tch = substring(@bat,13,4) --从第13位开始,截取4位长度
       if  @tch = '9999' 
          set @tch =  '0000'
       else
          set @tch =  convert(varchar,convert(int,@tch) + 1)
    if len(@tch) < 4 
    begin
    set @num = 4 - len(@tch)
    while (@num > 0) --循环在前面填充‘0’直到长度为4
    begin
    set @oct = @oct + '0'
    set @num = @num - 1
    end
    set @tch = @oct + @tch
    end
       return @tch
    END在前面并上系统
      

  4.   

    Function BuildOrderNo:String;
    Var
      i:Integer;
    Begin
      For i := 1 To 9999 Do
      Begin
        //生成日期+单号格式
        Result := Copy('0000' + IntToStr(i), Length('0000' + IntToStr(i)), 4);
        Result := DateToStr(Date)) + Result;
        {检测单号是否存在, 若不存在,则退出 }
        If 单号不存在 then
           Exit;  
      End;
    End;