问题描述
查询SQL不能在同一时间内,插入数据createtablet(idint,start_timevarchar(20),end_timevarchar(20));数据记录idstart_timeend_time12010-11-0311:00:00.0002010-11-0315:00:00.000if(SQL)--查到有数据{System.out.println("不能在同一时间插入数据");insertintot(id,start_time,end_time)values(1,'2010-11-0311:00:00.000','2010-11-0315:00:00.000');insertintot(id,start_time,end_time)values(1,'2010-11-0108:00:00.000','2010-11-0517:00:00.000');insertintot(id,start_time,end_time)values(1,'2010-11-0308:00:00.000','2010-11-0313:00:00.000');insertintot(id,start_time,end_time)values(1,'2010-11-0312:00:00.000','2010-11-0315:00:00.000');}if(SQL)--没数据{System.out.println("可以插入此数据");insertintot(id,start_time,end_time)values(1,'2010-11-0308:00:00.000','2010-11-0311:00:00.000');insertintot(id,start_time,end_time)values(1,'2010-11-0315:00:00.000','2010-11-0316:00:00.000');}
请教,以上的几条SQL语句该怎么写?
解决方案
解决方案二:
首先我想问下你id是主键吗?感觉可以重复的?然后正题,你首先根据时间条件去查找数据,也就是selectcount(*)fromtablewheretime='"+time+"'如果取到的结果大于0则表明有数据
解决方案三:
应该还需要注意一个问题,就是你之前的插入数据,中间是否需要考虑数据是否已经提交到DB?
解决方案四:
大概看了下你数据的规律,猜下吧,你说的应该不叫“同一时间内”,应该叫“在一个时间段内”,也叫是说插入的时间段,不能与数据库已存的时间段有重合的部分,是这样吗?假如你将要插入的数据的起始时间是s,结束时间是e,并且你将要插入的数据一定符合s<e,那应该是:select*fromtwhere(s<=start_timeande>start_time)or(s>=start_timeands<=end_time)如果查出数据就不能插!也就是说,如果插入数据的起始时间虽然比数据库中的起始时间小,但结束时间比起始时间大,那插入数据的时间段的后半段与数据库有重合,如果插入数据的起始时间比数据库中的起始时间大,那它只要没大过数据库中的结束时间,肯定时间的前半段与数据库有重合,如果起始时间比数据库中的结束时间还大,加上插入数据的结束时间一定比起始时间大,肯定不会有重合,所以在条件里不用考虑!
解决方案五:
没想过一个用sql完成的业务,呵呵
解决方案六:
弱弱的问下你是以系统时间为标准还是数据库时间你每次找到最大的时间然后用你要插入的数据去比较就是了