是否可以在hql中使用between,current_date和subdate函数?

时间:2014-11-19 16:17:47

标签: java sql hibernate java-ee hql

我想编写这样的hql查询

<query name="user.by.date">
    FROM User as u
    where u.Date between subdate(now(), interval 3 day) and now()

如果错了,我该如何改变? 哪里可以看到hql支持哪些函数? NOW()和CURRENT_DATE()之间有什么区别? 是否可以在NOW()

中使用CURRENT_DATE()

1 个答案:

答案 0 :(得分:3)

我建议你不要在你的HQL中使用像subdate()和now()这样的特定于数据库的函数,因为HQL用于使应用程序数据库独立。你应该计算 java中的 subdate(now(),interval 3 day) now(),并将这两个值作为参数传递给此查询,因为在JAVA中很容易做到,最后你的查询将如下所示。

<query name="user.by.date">
    FROM User as u
    where u.Date between :prevdate and :currentdate</query>

其中 prevdate 相当于 subdate(now(),interval 3 day) currentdate 相当于 now( ),两者都要从JAVA代码中计算和传递,因此它更容易,而且更多地超过数据库。

关于 now() current_date()之间的区别,现在为您提供日期和时间 current_date 仅为您提供输出日期。在mysql中尝试以下。

立即(): - &GT;

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2014-11-19 22:38:15 |
+---------------------+

current_date() - &gt;

mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2014-11-19     |
+----------------+