当前位置: 首页 > 面试题库 >

如何在hql中的两个日期之间动态搜索?

窦夜洛
2023-03-14
问题内容

我有两个日期搜索字段,即从和到。我必须从用户表中检索其startDate位于在搜索字段中输入的起始和终止日期之间的记录,如果起始和终止日期为null,则必须从用户表中检索所有记录。

我尝试了以下hql查询:

FROM USER 
WHERE 
:start_flag =1 
OR  
STARTDATE between :from and :to

在这里,start_flag的类型为int,如果from和to为null,则将其设置为1。

query.setParameter("from",startDt);
query.setParameter("to",endDt);
query.setParameter("start_flag",startFlag);
l=  query.list();

这里的数据类型是:

startDt-java.util.Date

endDt- java.util.Date

startFlag-int

当我使用 to和from等于null 运行上述查询时 出现以下异常:

SQL错误:932,SQL状态:42000

ORA-00932:数据类型不一致:预期日期为BINARY

您能告诉我如何编写HQL查询以实现上述功能吗?


问题答案:

像这样过滤它:

String query = "FROM USER WHERE :start_flag =1 ";
if(startDt!=null && endDt!=null){
   query +="OR STARTDATE between :start_date and :end_date";
}

TypedQuery<USER> hql = entityManager.createQuery(query);

if(startDt!=null && endDt!=null){
   hql.setParameter("start_date",startDt).setParameter("end_date",endDt);
}
List<USER> result = hql.setParameter("start_flag",startFlag).list();


 类似资料:
  • 我有两个日期搜索字段,即从和到。我必须从用户表中检索记录,其startDate位于搜索字段中输入的from和to日期之间,如果from和to日期为空,我必须从用户表中检索所有记录。 我尝试了以下hql查询: 这里start_标志的类型为int,如果from和to为null,则设置为1。 这里的数据类型是: startDt-java.util.Date endDt-java.util.Date st

  • 问题内容: 在MySql数据库中有表 我的问题是,我要传递开始日期和结束日期,然后我将获得列日期,例如: 那么我将获得101,102,103 UserId的值。但是我出错了 问题答案: 这可能会更好: 也可能是保留字,对此不太确定。如果是这种情况,则您需要在其周围加反引号(前后应有一个`)

  • 问题内容: 在所有三个日期都由的实例表示的情况下,如何检查某个日期是否在其他两个日期之间? 问题答案: 这可能更具可读性:

  • 问题内容: 我想要一个开始日期和结束日期之间的日期列表。 结果应为所有日期的列表,包括开始日期和结束日期。 问题答案: 一次添加一天直到达到结束日期: 实现自己的迭代器也可以做到这一点并不难,那就更好了。

  • 问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案:

  • 问题内容: 如果我在两个文本框中有两个日期20-4-2010和22-4-2010,并且我希望日期像这样的20、21、22,我该如何得到? 问题答案: 我很确定这已经回答了四千万次,但是无论如何: 该部分是为了防止代码跳过或者一天重复由于夏令时。 通过给出天数: 使用PHP5.3