遇到一个编号累计增加的难题,帮个忙
数据库格式 id(自动编号) bh(文本型) sdate(日期型)
想要的效果:
---------------------------------
ID bh sdate
---------------------------------
1 2007-1 2007-7-22
2 2007-2 2007-7-23
3 2007-3 2007-7-23
4 2008-1 2008-1-1
5 2008-2 2008-1-1
问题: ID是累加的,日期是取当前的,编号是:当前年份-x(目前x 我取的是ID值)
怎样能做到当时间为2008年时,bh为2008-1开始?而不是累加后的x??
[解决办法]
set rs = cn.execute( "select count(*) as maxbh from biao where bh like '2008% ' ")
newbh = rs!maxbh + 1
[解决办法]
Select top 1 bh From TABLE where bh like '2008-% ' ordry by bh Desc
执行得到 一条记录或0条记录.
如果0条,那就是1了.
如果1条,那你就将 bh读取来,去掉前面的2008-即可得到,数据库时最大的编号.
至于 你的 ...语句里不能出现2008,考虑将来2009 ...
你可以将语句里的2008做成变量,换汤不换药.
[解决办法]
ID是自动编号,所以用ID来编号也不可靠,比如删除一条数据后,ID就是不连续的了
set rs = cn.execute( "select max(bh) as max_bh from tb ")
if split(rs!max_bh, "- ")(0)=year(date) then
new_bh=split(rs!max_bh, "- ")(0) & "- " & cint(split(rs!max_bh, "- ")(1))+1
else
new_bh=year(date) & "- " & "1 "
end if
这个不知道是不是你要的?
[解决办法]
以下是SQL2000如果是access 把getdate() 改成 now()
select convert(varchar(4), year(getdate()))+ '- '+convert(varchar(10),count(*)+1) as bh from smt_ads where year(smt_lasttime)=year(getdate())
[解决办法]
select convert(varchar(4), year(getdate()))+ '- '+convert(varchar(10),count(*)+1) as bh from tablename where year(sdate)=year(getdate())
[解决办法]
vbman2003(家人)的方法可以满足你的要求,但是如果你的记录太多了以后这种方法会很慢。
我大概说一下我对你这个库的理解:
1 2007-1 2007-7-22
2 2007-2 2007-7-23
3 2007-3 2007-7-23
4 2008-1 2008-1-1
5 2008-2 2008-1-1
你的123条记录的意思是在2007年里发生了三笔业务,其发生的日期是后面的记录。
如果是这样我会再建一个表,
ID year Item_Count
1 2007 3
2 2008 2
然后再是你的表。
这样一来一是你知道你在特定年里有没有记录,有多少记录。这时你的问题就很容易解决。而且速度也会快很多。
这是我的建议,希望对你有帮助。
[解决办法]
错了 "2008-9 "> "2008-10 " 所以max()取不到正确的最大编号
所以还有 家人 说的另建状态表的方式 效果比较好
[解决办法]
嗯,ayalicer(小刀惋心)说的对,数据表中的排序 "2008-9 "是大于 "2008-10 "的,还是用表比较好
不用表的话可能这样行吧:
select max(val(mid(tt,6))) as n
from tb
where mid(tt,1,4)=year(date())
这样如果没有记录集返回:
new_bh=year(date) & "- " & "1 "
有记录集返回:
new_bh=year(date) & "- " & rs!n +1