我有一个现有的JPA@Query,我需要向WHERE添加一个添加条件,以便它只返回当前日期与时间戳列匹配的行。基本上想知道类似这样的事情是否可能:
@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日期/时间:
来自文档:
CURRENT_DATE:此函数返回数据库服务器上当前日期的值。CURRENT_TIME:此函数返回数据库服务器上的当前时间值。CURRENT_TIMESTAMP:此函数返回数据库服务器上当前时间戳的值。
ref:javadoc
这些可以通过以下方式直接访问当前日期
@Query("SELECT .. " +
"WHERE .. " +
"AND c.completedTs=CURRENT_DATE )"
请注意,AFAIK,这些是普通函数,不支持表达式,即不能执行CURRENT_DATE-1。