我想做一个自动产生编号:如今天是2008-07-01,自动生成的编号为200807010001,下一日其为200807010002,当月编号以此类推.
新的月份编号从0001又开始.如2008-08-01 编号为200808010001,当月编号也是以此类推.
不知那位同学可以为此写个存储过程或函数来调用的,谢谢!
新的月份编号从0001又开始.如2008-08-01 编号为200808010001,当月编号也是以此类推.
不知那位同学可以为此写个存储过程或函数来调用的,谢谢!
解决方案 »
- 如何删除scrollbox中所有的原有控件
- ASP:动太库调用应用程序,出现rundll32多个在进程中占用资源:怎么样办???
- 菜鸟问题:怎么判断Tedit中为非空?
- 谁有TApdComPort控件的详细说明?小弟急需呀?多谢!
- dynamic array question
- 请教关于数据库程序使用什么样的连接方式,主要是网络传输照片!顺便散分!!
- 请教dbgrid问题
- 关于组件和插件的联系和差别
- delphi使用fastreport,subreport怎么指定创建好的page?
- 请大家帮帮忙!!
- 新手问题: 从表中取出20条记录,并写到F盘的filea.txt文件中,语句怎么写呢?
- 求对象转Viriant的装载器,要求高效率,并可装载任意类型.
//strPer:单据号前缀
//fieldname:存放单据号的字段名称
//tablename:表名称 PO20080128001
function createno(strPer,fieldname,tablename: string):string;
var
strSql, temp:string;
amyQuery:tmyquery;
begin
amyQuery:=tmyquery.create(nil );
amyQuery.connection:=GV_Con;
amyQuery.SQL.Clear ;
strSql:='select max(' + fieldname + ')' + ' from '+ tablename;
amyQuery.SQL.Add(strSql);
amyQuery.Open;
if amyQuery.Fields[0].AsString='' then
createno:=strPer+getcurrq(0,'')+'000001'
else
begin
//amyQuery.Fields[0].asstring
temp := rightstr(amyQuery.Fields[0].asstring,6);
createno:=strPer+getcurrq(0,'')+Format('%.6d',[StrToInt(temp)+1]); //流水号占6位
end;
end;
下面是 SQL, 查询分析器里执行, 做成一个 SQLDECLARE @DT DATETIME
DECLARE @DTPART VARCHAR(8)
DECLARE @ID VARCHAR(12) /* OUTPUT 做成存贮过程用这个做输出 */
DECLARE @MAX_ID VARCHAR(12)SET @DT = GETDATE()
SET @DTPART = CAST(DATEPART(year, @DT) * 10000 + DATEPART(month, @DT) * 100 + (DATEPART(day, @dt)) AS VARCHAR(8))
SET @ID = @DTPART + '0001'/* SELECT @MAX_ID = MAX(ident) FROM TABLE WHERE ident > @ID*/SELECT @MAX_ID = '200808080002' /* 测试值 */IF @MAX_ID IS NOT NULL
BEGIN
SET @MAX_ID = RIGHT(@MAX_ID, 4)
SET @ID = RIGHT('0000' + CAST(CAST(@MAX_ID AS INT) + 1 AS VARCHAR(4)), 4)
ENDSELECT @ID