hql关于时间的查询

// String hql = " from Tbonusgoods goods,Tbonusrule rule where
    // goods.tbonusrule=rule.eventPkid "
    // + "and rule.startDate between :d1 and :d2";
 String hql = " from Tbonusgoods goods,Tbonusrule rule where goods.tbonusrule=rule.eventPkid "
      + "and rule.startDate >= :d1 and rule.endDate <= :d2";
    try {
     Query q = this.getSession().createQuery(hql);
     ChangeDate cd = new ChangeDate();
     cd.setStartDate("2007-12-02");
     cd.setEndDate("2007-12-05 ");
     System.out.println(cd.getStartDate());
     q.setDate("d1", cd.getStartDate());
     q.setDate("d2", cd.getEndDate());
     List list = q.list();
     System.out.println(list.size());
     return list;
    } catch (RuntimeException re) {
     re.printStackTrace();
     return null;
    }

处理函数:
 public class ChangeDate {
 private String startDate;

 private String endDate;

 //private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd   HH:mm:ss ");
 private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

 public Date getStartDate() {
    Date d = null;
    try {
     if (startDate != null && !startDate.equals(" ")) {
      d = sdf.parse(this.startDate);
      // System.out.println(d.toLocaleString());
     }
    } catch (Exception e) {
     d = null;
     e.printStackTrace();
    }
    System.out.println(d);
    return d;
 }

 public void setStartDate(String startDate) {
    this.startDate = startDate;
 }

 @SuppressWarnings("deprecation")
 public Date getEndDate() {
    Date d = null;
    try {
     if (endDate != null && !endDate.equals(" ")) {
      d = sdf.parse(this.endDate);
     
      // System.out.println(d.toLocaleString());
     }
    } catch (Exception e) {
     d = null;
     e.printStackTrace();
    }
    System.out.println(d);
    d.setDate(d.getDate()+1);//保证在查询的时候,当天的数据能被获得
    return d;
 }

 public void setEndDate(String endDate) {
    this.endDate = endDate;
 }

}



其中出现的问题希望记录一下:(数据库存储的格式是yyyy-MM-DD)

1、在查询的时候,打印出来的时间如下:

Sun Dec 02 00:00:00 CST 2007
Wed Dec 05 00:00:00 CST 2007

看到了,尽管使用了"<=" 但5号当天是数据是查不出来是,因为从上面就可以看出,如果小于的话,也是等于零点的,也就是说查询到了4号的数据,这样不可以,所以在程序中自动让他加了一天。

还有between里面也回出现上面的问题,边缘值查不到

猜你喜欢

转载自hqlly.iteye.com/blog/1041609