Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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_Jira_Hsqldb_Active Objects - Fatal编程技术网

Java 无法查询特定范围内的日期条件

Java 无法查询特定范围内的日期条件,java,jira,hsqldb,active-objects,Java,Jira,Hsqldb,Active Objects,我想从HSQL数据库中获取记录,查询如下: ao.find(Issueda.class, Query.select().where("user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>= TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')",user,parsedDate,parsedDate)) at java.

我想从HSQL数据库中获取记录,查询如下:

ao.find(Issueda.class, Query.select().where("user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>=     TO_DATE(?,'yyyy/MM/dd') AND TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')",user,parsedDate,parsedDate))
at java.lang.Thread.run(Thread.java:662)
 Caused by: java.sql.SQLException: Unexpected token: TO_DATE in statement [SELECT * FROM    
PUBLIC.AO_0371A8_ISSUE_da WHERE user=? AND TO_DATE(START_TIME, 'yyyy/MM/dd')>= TO_DATE(?,'yyyy/MM/dd') AND    TO_DATE(END_TIME, 'yyyy/MM/dd') <= TO_DATE(?,'yyyy/MM/dd')]

ao.find(Issueda.class,Query.select()。其中(“user=”和TO_日期(开始时间,'yyyy/MM/dd')>)=TO_日期(?,'yyyy/MM/dd')和TO_日期(结束时间,'yyyyy/MM/dd')此查询不需要输入日期。TO_日期用于转换字符串格式的日期

从您的评论来看,您似乎希望一个参数介于两个日期之间,或者在两个日期之外

此类型查询的正确SQL如下所示:

这将返回开始和结束之间的日期,包括:

WHERE USER=? AND ? BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)
这将返回开始和结束之外的日期:

WHERE USER=? AND ? NOT BETWEEN CAST(START_TIME AS DATE) AND CAST(END_TIME AS DATE)
对于上述查询,您将java.sql.Data对象与
PreparedStatement.setDate(colIndex)

现在,如果要比较的日期是一个格式为“2013/05/20”的字符串,则需要
to_date(?,'yyyy/MM/dd')
而不是参数。如果日期是一个格式为“2013-05-20”的字符串,则可以使用
CAST(?as date)
而不是参数


我假设您的数据库表列START_TIME和END_TIME被定义为TIMESTAMP类型,但它应该适用于VARCHAR(N)或CHAR(N)类型。

如果它们已经是日期格式,则无需使用to_date on START_date和END_date。请尝试此
ao.find(Issueda.class,Query.select()。其中(“user=”和START_TIME>=to_date(?,'yyy/MM/dd')和结束_TIME@SantoshPingale我刚刚尝试过:它给了我-at java.lang.Thread.run(Thread.java:662)的错误,原因是:java.sql.SQLException:语句[SELECT*FROM PUBLIC.AO_0371A8_ISSUE_da WHERE user=?和START_TIME>=TO_DATE(?,'yyyy/MM/dd')中的意外标记:TO_DATE和END_TIME您不需要为这个查询指定日期。使用
START_TIME>?和END_TIME<?
,然后创建一个java.sql.Data来设置PreparedStatement变量。TO_DATE用于转换字符串格式的日期。@fredt我已经删除了TO_DATE,现在TO_DATE的错误被删除了。但是,即使有记录,我也没有得到任何结果都存在于数据库中。我的条件如下:“开始时间>=?和结束时间@fredt我已将条件更改为-“开始时间=?或结束时间=?或(开始时间<?和结束时间>?)现在,这是匹配条件的工作-‘开始时间=?”,但当日期介于开始时间和结束时间之间时,它不工作(即开始时间<?和结束时间>?)但无法获得这些结果…任何想法,我是否必须确定日期或任何原因?非常好@fredt。这对我很有效。您的第一个查询实际上是解决“开始和结束之间的日期,包括:”。非常感谢!。