// 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里面也回出现上面的问题,边缘值查不到