如何在HSQLDB和MySQL中编写一个查询,在WHERE子句中为日期添加天数?

如何在HSQLDB和MySQL中编写一个查询,在WHERE子句中为日期添加天数?,mysql,sql,hibernate,where-clause,hsqldb,Mysql,Sql,Hibernate,Where Clause,Hsqldb,我想在日期列中添加特定天数,然后将其与当前日期进行比较。是否有任何方法可以实现这一点,并与HSQLDB(用于测试)和MySQL(用于生产)兼容 为了使事情变得更复杂,我使用了Hibernate。不知道问题的背景,但您可以用另一种方法来解决问题:将dae列与当前日期减去天数进行比较吗 我在hql中的意思是这样的(如果您更喜欢JPA接口,我在本例中使用jpql): TypedQuery q=getEntityManager().query( “从SomeClass s中选择s,其中s.date=:d

我想在日期列中添加特定天数,然后将其与当前日期进行比较。是否有任何方法可以实现这一点,并与HSQLDB(用于测试)和MySQL(用于生产)兼容


为了使事情变得更复杂,我使用了Hibernate。

不知道问题的背景,但您可以用另一种方法来解决问题:将dae列与当前日期减去天数进行比较吗

我在hql中的意思是这样的(如果您更喜欢JPA接口,我在本例中使用jpql):

TypedQuery q=getEntityManager().query(
“从SomeClass s中选择s,其中s.date=:date”,SomeClass.class);
Calendar now=Calendar.getInstance();
//从当前日期减去天数,例如10天
现在添加(Calendar.DAY,-10);
q、 setParameter(“日期”,现在);
List=q.getResultList();

这种方法与数据库无关,但当然只适用于琐碎的情况,在某些更复杂的情况下,它将不起作用。

mysql:
WHERE somefield+INTERVAL 42 day>curdate()。至于一个同时适用于这两种情况的查询,请对此表示怀疑。sql可能是一种“标准”语言,但它基本上是英国sql vs.s.美国sql vs.s.澳大利亚sql。大量方言的用法都略有不同。不幸的是,区间语法在hibernate中似乎不起作用,这是一个麻烦。HSQLDB:
其中somefield+interval 42 day>curdate()
和curdate()的几种替代方法都起作用。fredt:yes。解决方案就是不使用hibernate。Hibernate不支持时间间隔。问题是,与mysql相比,hsql中对日期进行减法或加法操作的函数不同。interval语法在hsql和mysql中都有效,但在hql(hibernate查询语言)中不起作用。我的解决方案是用常规SQL编写所有查询。重写它们只是一种轻微的痛苦,但它奏效了。
TypedQuery<SomeClass> q = getEntityManager().crateQuery(
    "select s from SomeClass s where s.date = :date", SomeClass.class);
Calendar now = Calendar.getInstance();
// subtract number of days from current date, e.g. 10 days
now.add(Calendar.DAY, -10);
q.setParameter("date", now);
List<SomeClass> = q.getResultList();