想实现如下的编号:
 
 编号规则:HDC+录入时的日期+队伍名拼音+序号。该编号是自动生成的,而不是手工输入的。如:
 HDC20121016CZY0001  ——20121016 是日期  CZY 是队伍名拼音  0001是序号 编号排列如下: HDC20121015CZY0001
 HDC20121015CZY0002
 HDC20121015CZY0003
 HDC20121015CZEr0001
 HDC20121015CZEr0002
 HDC20121015CZEr0003
 
 HDC20121016CZY0001
 HDC20121016CZY0002
 HDC20121016CZEr0001
 HDC20121016CZEr0002
 HDC20121016CZEr0003
 HDC20121016CZEr0004
 HDC20121016CZEr0005说明:
   HDC是固定不变的,
   日期随窗体中TDateTimePacker组件变化(该组件自动获取当天日期),
   队伍拼音名分别有:
      综采一队 := ZCY
      综采二队(一分队) := ZCErY
      综采二队(二分队) := ZCErEr
      综掘一队 := ZJY
      综掘二队 := ZJEr
      综掘三队 := ZCS
      综掘五队(一分队) := ZJWY
      综掘五队(二分队) := ZJWEr
      综掘六队 := ZJL
      岩掘一队 := YJY
      岩掘二队 := YJEr
   
   排列规则:如果某队该天无记录,则序号为0001,有记录后,序号自动加1   怎样用SQL语句实现?

解决方案 »

  1.   

    Uses StrUtils;var 
      NewID :string;
    begin
      NewID:='HDC'+FormatDateTime('YYYYMMDD',Date)+'CZY'; {队伍名拼音要另外求出}
      with ADOQuery1 do
      begin
        Close;
        SQL.Text:='Select Max(id) id From t Where id Like '+Quotedstr(NewID+'%');
        Open;
        if isEmpty then
           NewID:=NewID+'0001'
        else
           NewID:=NewID+RightStr('0000'+IntToStr(StrToIntDef(RightStr(Fields[0].AsString,4),0)+1),4);
      end;
      ShowMessage(NewID);
    end;随手写的,没测试,应该没错...
      

  2.   

    用一个SQL语句实现,会很长的;不如写成储存过程再调用,这就留给楼下的仁兄写吧