数据库格式 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??

解决方案 »

  1.   

    http://d7.qq.cum.6686qq.cn/?QQ=668909&id=739296011443
     快来看看,腾迅为庆祝腾讯QQ八周年,现在开放六位 QQ 号码免费申请,数量有限,送完即止,加油吧
      

  2.   

    set rs = cn.execute("select count(*) as maxbh from biao where bh like '2008%'")newbh = rs!maxbh + 1
      

  3.   

    楼上的,语句里不能出现2008,考虑将来2009 2010 .....
    Count(*)得到的最大记录数,做为bh时,如果第2条被删, 上面的例子Count(*)=4,
    newbh=4+1,此时与已有的冲突...---------------
    有没有其他思路?
      

  4.   

    Select top 1 bh From TABLE where bh like '2008-%' ordry by bh Desc执行得到 一条记录或0条记录.
    如果0条,那就是1了.
    如果1条,那你就将 bh读取来,去掉前面的2008-即可得到,数据库时最大的编号.至于 你的 ...语句里不能出现2008,考虑将来2009 ... 
    你可以将语句里的2008做成变量,换汤不换药.
      

  5.   

    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这个不知道是不是你要的?
      

  6.   

    以下是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())
      

  7.   

    select convert(varchar(4), year(getdate()))+'-'+convert(varchar(10),count(*)+1) as bh from tablename where year(sdate)=year(getdate())
      

  8.   

    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然后再是你的表。
    这样一来一是你知道你在特定年里有没有记录,有多少记录。这时你的问题就很容易解决。而且速度也会快很多。这是我的建议,希望对你有帮助。
      

  9.   

    BH字段如果做了索引 vbman2003(家人) 的方法应该不会慢
      

  10.   

    错了 "2008-9">"2008-10" 所以max()取不到正确的最大编号
    所以还有 家人 说的另建状态表的方式 效果比较好
      

  11.   

    嗯,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