如何按时间自动生成类似20061023001的编号,到网络上搜索得到的结果令人十分失望!100篇文章有99篇是相同的,内容更是一字不差,见《ASP自动生成编号的方法》。最令人气愤的还不是这个,而是搜索到的内容很滥,根本毫无用处。在此强烈鄙视一下那些相互转载垃圾的垃圾网站。
那么如何生成20061023001这样的编号呢。这个编号的前8位是时间,后面三位每天从001开始递增。
假设数据库中有id和number,number是文本字段,用来存储这个编号。
< % TempID=Year(now())&Right("00" & Month(now()),2)&Right("00" & Day(now()),2)&"001" sql="select * from table order by id desc" set rs=server.createobject("adodb.recordset") rs.open sql,conn,1,3 If Left(TempID,8)=Left(rs("number"),8) Then TempID=rs("number")+1 End If %>
那其中变量TempID的初始值是今天的001号,如果最后一条记录是今天的,则在number上加1,赋值给TempID。
最后在插入的时候令number等于TempID就可以了。
exec=”insert into table(number)values(‘”&TempID&”‘)”
conn.execute exec
这是不是错了啊,因为简单到我不敢相信自己的眼睛。但是在程序中已经通过验证了。不足之处还请高手指正!!!
[email protected]:感谢fisker提醒,假如数据库中还没有数据,则程序会报错,而且执行效率也有问题。现修改如下
< % TempID=Year(now())&Right("00" & Month(now()),2)&Right("00" & Day(now()),2)&"001" sql="select top 1 [number] from table order by id desc" set rs=server.createobject("adodb.recordset") rs.open sql,conn,1,3 If not rs.eof and rs.bof Then ElseIf Left(TempID,8)=Left(rs("number"),8) Then TempID=rs("number")+1 End If %>
23 10 月, 2006 at 下午12:36
那天你问我后,我又想了一下,关于最后的补零用下面这个函数比较好,这样的话在其它的程序里也能方便的使用了。
function FixLen(sNum,sLen)
dim sTemp
sTemp=String(sLen-len(sNum),”0″)&sNum
FixLen=sTemp
end function
23 10 月, 2006 at 下午12:40
还有,你写的这个并没有判断是否是第二天,第二天的时候并不能重新编号噢
23 10 月, 2006 at 下午1:17
噢,看漏了,不错,比那天我想的那个好
23 10 月, 2006 at 下午7:17
很显然效率不够,一些细节没注意.等下发个邮件给你.