假设我在 Oracle DB 中有一个列,如下所示:
带有时区的SOMETHING_TS TIMESTAMP
我想使用 CriteriaQuery 按此列进行过滤。
我可以使用 native 查询来实现此目的:
SELECT *
FROM SOMETHING
WHERE TRUNC(SOMETHING_TS) = TO_DATE('2016-12-08','YYYY-MM-DD');
但是在Java中我没有这样做,下面是我的示例代码:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
Date date = new Date();
predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", Date.class, cb.parameter(Date.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));
Predicate[] predArray = new Predicate[predicates.size()];
predicates.toArray(predArray);
cq.where(predArray);
TypedQuery<MyClass> query = em.createQuery(cq);
query.setParameter("somethingDt", date);
最佳答案
看来我已经找到了答案:
predicates.add(cb.equal(cb.function("TRUNC", Date.class, myClass.get("somethingTs")), cb.function("TO_DATE", String.class, cb.parameter(String.class, "somethingTs"), cb.literal("YYYY-MM-DD"))));
然后当我设置参数时,我将设置要查询的日期的字符串格式。
谢谢!
关于java - JPA CriteriaQuery 比较时间戳忽略时间部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030148/