Java 无法根据日期范围查询获取结果
我想从HSQL数据库中获取记录,查询如下:Java 无法根据日期范围查询获取结果,java,date,datetime,hsqldb,Java,Date,Datetime,Hsqldb,我想从HSQL数据库中获取记录,查询如下: ao.find(IssuesAD.class, Query.select().where("user=? AND (START_TIME = ? OR END_TIME = ? OR (convert(START_TIME,DATE) < convert(?,DATE) AND convert(END_TIME,DATE) > convert(?,DATE)) )",user,sqlDate,sqlDate)) // also tried
ao.find(IssuesAD.class, Query.select().where("user=? AND (START_TIME = ? OR END_TIME = ? OR (convert(START_TIME,DATE) < convert(?,DATE) AND convert(END_TIME,DATE) > convert(?,DATE)) )",user,sqlDate,sqlDate))
// also tried by removing 'convert'
ao.find(IssuesAD.class,Query.select().where(“用户=”和(开始时间=?或结束时间=?或(转换(开始时间,日期)和转换(结束时间,日期)>convert(?,日期))”,用户,sqlDate,sqlDate))
//还尝试删除“convert”
当我保存或检索时,我会将java.util.date转换为java.sql.date格式
上述查询可以很好地检索与确切日期匹配的记录,即开始时间=?或结束时间=?但即使存在记录,它也不适用于日期范围(开始时间<?和结束时间>)
数据库中的记录以类似的形式存在-结束日期为“2013-05-27 00:00:00.000000000”,开始日期为“2013-05-23 00:00:00.000000000”
参数值为“2013-05-24”,虽然无法在结果中检索到,但介于上述记录之间
另外,另一个记录-结束日期为“2013-05-30 00:00:00.000000000”,开始日期为“2013-05-23 00:00:00.000000000”。
参数值为'2013-05-28',应检索但未检索
其他材料:
final java.sql.Date sqlDate = new java.sql.Date(startdatefield.getTime());
logger.info("final date sql date:" + sqlDate); //it prints as 2013-05-28
for (IssuesAD pi : ao.find(IssuesAD.class, Query.select().where("user=? AND (START_TIME = ? OR END_TIME = ? OR (convert(START_TIME,DATE) < convert(?,DATE) AND convert(END_TIME,DATE) > convert(?,DATE)) OR (convert(START_TIME,DATE) > convert(?,DATE) AND convert(END_TIME,DATE) < convert(?,DATE)))",user,sqlDate,sqlDate)))
{
....
}
final java.sql.Date sqlDate=new java.sql.Date(startdatefield.getTime());
logger.info(“最终日期sql日期:+sqlDate”)//打印日期为2013-05-28
对于(IssuesAD pi:ao.find(IssuesAD.class,Query.select()。其中(“用户=?和(开始时间=?或结束时间=?或结束时间=?或(转换(开始时间,日期)<转换(?,日期)和转换(结束时间,日期)>转换(?,日期))或(转换(开始时间,日期)>转换(?,日期)和转换(结束时间,日期)<转换(?,用户,sqlDate,sqlDate)))
{
....
}
在数据库-开始日期和结束日期中,两个字段都是“日期时间”类型
你知道这里出了什么问题吗
谢谢验证您的参数。”2013-05-27…'不大于参数'2013-05-28',该参数是您的条件。@jayc。抱歉搞混了。。我刚刚更正了上面的原始帖子。我还尝试将上述第二条记录的特定值硬编码为“2013-05-28 00:00:00.000000000”作为参数值,而不是“2013-05-28”。虽然它不起作用,也无法获取记录的跟踪日期范围。我怀疑您可能比较了错误的数据类型,例如:比较字符串日期(虽然看起来像日期)和实际日期(标准日期类型)永远不会相等。请确保您比较的是什么!实际上,输入参数类型也是java.sql.date,数据库字段也是DATETIME类型。我刚刚更新了原始评论,加入了其他相关内容。@Dhaval-另请参阅。您可能需要>=开始&&<结束。(不确定这是否是根本原因,因为我不熟悉hsqldb)