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