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

Is it possible to have a condition in a JPA @Query statement to determine if a timestamp matches the current date?

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

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

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

编辑:我的解决方案最终是使用原生查询,例如:

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

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

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

JPQL 公开了几个函数来关联 CURRENT date/time :

来自文档:

CURRENT_DATE: This function returns the value of current date on the database server. CURRENT_TIME: This function returns the value of current time on the database server. CURRENT_TIMESTAMP: This function returns the value of current timestamp on the database server.

参考:javadoc

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

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

请注意,据我所知,这些是原始函数,不支持表达式,即,您不能执行 CURRENT_DATE-1.