论坛首页 入门技术论坛

判断数据库表每条记录中时间段是否在每一个时间段中

浏览 2096 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-01-09  

 

  项目中一个成品价格表,每条记录中的价格有一个使用时间段,但是各个记录中时间段不存在交叉,

判断一段时间内的价格的算法:

 数据库的价格表: productprice  列字段 开始时间点 startDate  结束时间点 endDate

查询 开始时间点 startDate0  结束时间点 endDate0

查询使用使用算法公式:

startDate <= endDate0  and  endDate>=startDate0

 

得到时间段的价格:

 

 

应用如下:

/**
  * 分页查询时使用
  *
  * @param <T>
  * @param paginater
  * @param searchCondition
  * @return
  */
 public <T> Paginater<T> paginate(Paginater<T> paginater, final ProductItemPriceCondition searchCondition) {

  Sorter sorter = paginater.getSorter();
  if (sorter.isEmpty()) {
   sorter = new Sorter().asc("p.startDate");
  }
  LimitedList<T> limitedList = findByQuery(new QueryCreator() {
   public Query createQuery(Session session) {
    DynamicQuery dynamicQuery = new DynamicQuery("select distinct p from " + searchCondition.getForTypeName() + " p where (1 = 1) ");
    dynamicQuery.appendIfNotNull(" and  p.startDate<=:endDate ", "endDate", searchCondition.getEndDate());
    dynamicQuery.appendIfNotNull(" and p.endDate>=:startDate ", "startDate", searchCondition.getStartDate());
    dynamicQuery.appendIfNotNull("and p.productId=:productId ", "productId", searchCondition.getProductId());
    return dynamicQuery.build(session);
   }
  }, paginater.getLimit(), sorter);
  return paginater.fromLimitedList(limitedList);
 }

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics