是否可以在JPA@Query语句中设置一个条件来确定时间戳是否与当前日期匹配



我有一个现有的JPA@Query,我需要向WHERE添加一个添加条件,以便它只返回当前日期与时间戳列匹配的行。基本上想知道类似这样的事情是否可能:

@Query("SELECT .. " +
"WHERE .. " +
"AND isCurrentDay(c.completedTs))"

否则,可以使用本机查询完成我需要的内容。

编辑:我的解决方案最终是使用像这样的本地查询

@Query(value = "SELECT ... " + 
"WHERE ... " + 
"AND CONVERT (date, c.completedTs) = CONVERT (date, GETDATE()))", 
nativeQuery = true)

我认为使用您正在编写的语言的CURDATEsql语句通过本机查询来完成这项操作会更安全。例如,对于MySQL+JPA,它看起来像这样:

@Query("SELECT .. " +
"WHERE .. " +
"AND WHERE DATE(`completed_ts`)=CURDATE()", 
nativeQuery = true)

JPQL暴露了一些函数来关联CURRENT日期/时间:

来自文档:

CURRENT_DATE:此函数返回数据库服务器上当前日期的值。CURRENT_TIME:此函数返回数据库服务器上的当前时间值。CURRENT_TIMESTAMP:此函数返回数据库服务器上当前时间戳的值。

ref:javadoc

这些可以通过以下方式直接访问当前日期

@Query("SELECT .. " +
"WHERE .. " +
"AND c.completedTs=CURRENT_DATE )"

请注意,AFAIK,这些是普通函数,不支持表达式,即不能执行CURRENT_DATE-1。

最新更新