休眠查询日期仅比较月份

Posted

技术标签:

【中文标题】休眠查询日期仅比较月份【英文标题】:Hibernate query date compare month only 【发布时间】:2016-08-09 05:08:22 【问题描述】:

我需要从 mysql 表中获取一些记录,该表的列 posted_dateTimestamp。我只需要通过比较月份来过滤记录。例如,我只想要本月发布的所有记录。

我按照此链接Hibernate query date compare on year and month only中给出的方法进行了尝试

但我得到以下错误

line 1:106: unexpected token: to_char
    at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:769)

HQL中如何以月份为参数只与月份比较?

【问题讨论】:

【参考方案1】:

像这样使用 MONTH(...) HQL 函数:

select so from SomeObject so where MONTH(so.date) = MONTH(:date)

或(简单但与数据库无关 - 适用于 Oracle/PostgreSQL/H2)

select so from SomeObject so where TO_CHAR(so.date, 'MM') = :month_as_string

【讨论】:

from SomeObject so where MONTH(so.date) = :date 工作正常。,谢谢。 如果对您有帮助,请将此答案标记为正确。 方式 2 不工作!错误:“TO_CHAR”不是可识别的内置函数名。 @Lê Công Tuấn Vũ - 值得一提的是第二种方式与数据库无关。它适用于 Oracle/PostgreSQL/H2。你可以阅读更多关于HQL Date Formats here的信息。

以上是关于休眠查询日期仅比较月份的主要内容,如果未能解决你的问题,请参考以下文章

如何编写查询以通过拆分字段来选择行比较

ORA-01843 不是有效月份 - 比较日期

如何在 SQL Server 2008 的 where 子句中仅比较日期并忽略时间

查询数据库以显示基于当前日期和月份的数据总数

更改操作系统日期和时间后线程休眠

检查过期日期是否无效 - 获取当前月份和年份没有“/”