需要设计一个表,主键为int (8)
前四位是年份,后四位是数字,比如2012年的就是20120001,增加一条语句就为20120002
到2013年就重新开始,20130001,20130002 这样子。
这该如何实现?用java怎么写?
前四位是年份,后四位是数字,比如2012年的就是20120001,增加一条语句就为20120002
到2013年就重新开始,20130001,20130002 这样子。
这该如何实现?用java怎么写?
解决方案 »
- hibernate 1-n映射配置文件出错了求解错误如下
- 关于HIbernate和Spring 使用annotation和xml配置问题
- spring3.0整合Hibernate3.6的问题
- 求助:import导入错误
- 分布式是一个什么概念?
- 多对一关系,由于"一"方不存在导致"多"方不能加载
- (散分)请问上海通方软件,怎么样?(顶着有分)
- 谁有EJB的代码
- weblogic-ejb-jar.xml 与weblogic-rmp-rdbms-jar11.xml 文件怎么创建?
- Struts中两个或多个ActionForm能共用一个Action吗?
- 通过下拉菜单得到对应的数据
- The method init(String) is undefined for the type GoodsField 在线等!!
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;存在的问题,如果表为空,就不会有返回值。
这样吧,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。你想要知道是哪一年的数据, 加一个字段保存一个时间嘛
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')