是否可以在 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.
我有一个现有的 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.