使用 eclipselink jql 从日期中提取年、月和日

extract year, mounth and day from a date using eclipselink jql

我正在将日期从 primefaces 日历发送到支持 bean。 primefaces 发送的对象是 Date。

<p:calendar id="exact_Date" value="#{h.model.arhExactDate}" pattern="yyyy/MM/dd"/>

调试器中的日期看起来像 Thu Mar 02 00:00:00 EET 2017。

我只想从中提取日期部分(没有时间)并将其与数据库中的时间戳进行比较 like 2017-03-02 18:57:19。 152 使用 eclipselink jpql。

所以它会是这样的: cast(2017-03-02 18:57:19.152 as varchar) like 2017-03-02 18 其中 "like" 之后的部分是 date prat from日期。

查看此 basic eclipselink guide 我发现我可以使用如下提取方法:extract(year from my_date)。但是我怎样才能提取所有我需要的东西呢?

我尝试了下面的查询,但不是有效的表达式:

select e from MyEntity e where  extract(year from e.reqDate) = :extract(year from exactDate)

如果可行,我希望有类似的东西:

 extract(year,mounth,day from e.reqDate) =:(exactDate)

我不想要这样的东西: 提取物(来自e.reqDate的年份)=:提取物(来自确切日期的年份)和提取物(来自e.reqDate的月份)=:提取物(来自确切日期的月份)和提取物(来自e.reqDate的日期)=:提取(确切日期的日期)

我希望 EclipseLink 支持以下供应商扩展 JPQL 函数

MONTH(field)
YEAR(field)
DAY(field)

请注意,这些不是 JPA 标准,但大多数 JPA 提供程序都支持它们。查看您的提供商的手册。 "extract" 是一个 SQL 函数,它只适用于 SQL 极少数数据库,所以最好避免使用

由于你想传​​入一个日期对象并且只比较不包括时间部分的日期值,你可以尝试在 JPQL 中使用 TruncateDate 或 Trunc 选项:

"select e from MyEntity e where truncateDate(e.reqDate) = :dateParameter"

TRUNC 在大多数数据库上都有,如果没有给定 year/month/day 参数,则应该默认删除时间。可以使用 JPQL 的 FUNCTION:

在其他提供程序中访问它
"select e from MyEntity e where FUNCTION('TRUNC', e.reqDate) = :dateParameter"