需要设计一个表,主键为int (8)
前四位是年份,后四位是数字,比如2012年的就是20120001,增加一条语句就为20120002
到2013年就重新开始,20130001,20130002 这样子。
这该如何实现?用java怎么写?

解决方案 »

  1.   

    get当前年份 +数据库当前年的记录数=前四位是年份,后四位是数字,比如2012年的就是20120001
      

  2.   


    create table tt(aa int);
    insert into tt(aa) values('20110001');
    select ifnull(zz,(year(now())*10000)+1) from tt,
                  (select max(aa) zz from tt where aa>(year(now())*10000)) mm;存在的问题,如果表为空,就不会有返回值。
      

  3.   


    这样吧,20120001
    year=2012好获得吧,不说了,0001必须是一个自增的值才有意义,还必须保证是4位,不足4位前面添0整一个全局变量  int index=1;
    String primaryId;
    int num=String.valueOf(index).length();
    if(num==1){
    primaryId=year+"000"+index;
    }else if(num==2){
    primaryId=year+"00"+index;
    }else if(num==3){
    primaryId=year+"0"+index;
    }else{
    primaryId=year+index;
    }insert into tablename(id,a,b,c) values(primaryId,?,?,?);
    你这个要求有点奇怪,反正这样可以实现。不过有一些其他的因素需要考虑。数据库的主建,直接让它autoincrement就行了,如果是oracle 就用sequence。你想要知道是哪一年的数据, 加一个字段保存一个时间嘛
      

  4.   

    CONCAT(DATE_FORMAT( NOW() ,'%Y'),MID('0000',LENGTH(id)+1),id)  id 为你传过来的值
      

  5.   

    空闲了  有来逛了下   写了能查出上条 并根据你的要求得到一个插进去的值  看能不能帮到你  不妨试试
    SELECT CONCAT(DATE_FORMAT( NOW() ,'%Y'),
    MID("0000",LENGTH(MID(IFNULL(MAX(t.id),1),5)+1)+1),MID(IFNULL(MAX(t.id),'00000'),5)+1) 
     FROM test tWHERE MID(t.id,1,4) = DATE_FORMAT( NOW() ,'%Y')