如何使用条件查询基于日期获取数据



我正在处理条件查询,希望根据日期获取数据。但是,类似条件查询的条件不适用于日期。

我从用户那里得到了类似2020-08-25的日期。

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<FermBatch> cq = cb.createQuery(MyClass.class);
Root<MyClass> root = cq.from(MyClass.class);
cq.where(cb.like(root.get(MyClass_.date), date+"%"));
return em.createQuery(cq).getResultList();

在这种类似的情况下,它显示错误:

类型中类似(Expression,String(的方法CriteriaBuilder不适用于参数(Path,字符串(

在我的数据库中,日期像这样存储在2020-08-25 03:02:06中我如何才能根据过去的日期获取所有数据(只使用日期,时间无关紧要(。

我也尝试了这个解决方案从其他stackoverflow问题链接:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
Root<MyClass> entity = cq.from(MyClass.class);
cq.select(entity);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.like(cb.lower(entity.get(MyClass_.date).as(String.class)), "%"+date.toLowerCase()+"%")); 
Path<Tuple> tuple = entity.<Tuple>get("date");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("date"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+date.toLowerCase()+"%"));
}
cq.where(predicates.toArray(new Predicate[]{}));
TypedQuery<MyClass> query = em.createQuery(cq); 
return query.getResultList();

这返回了一个空的数组列表。那么我做错了什么?

我建议通过"数据";以毫秒为单位;它总是更容易。

无论如何,你不应该使用运算符";像";日期;你应该使用等于、低于或大于。

long millis = 1598359174854l; // Tue Aug 25 2020 12:39:34
Predicate pred = criteriaBuilder.greaterThanOrEqualTo(
root.get(MyClass_.date),
new Date(millis);

如果你有字符串,你应该首先将字符串转换为DATE,然后你必须比较:

String date = "2020-08-25";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
Date cal = dateFormat.parse(date);

此代码适用于我的

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<MyClass> query = builder.createQuery(MyClass.class);
Root<MyClass> root = query.from(MyClass.class);

Predicate predicate = builder.conjunction();
predicate = builder.like(root.get(MyClass_.date).as(String.class), "%"+date+"%"); 

query.where(predicate).select(root);;

return em.createQuery(query).getResultList();

谢谢大家。

相关内容

  • 没有找到相关文章

最新更新