Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法根据日期范围查询获取结果_Java_Date_Datetime_Hsqldb - Fatal编程技术网

Java 无法根据日期范围查询获取结果

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

我想从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 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)