Java 无法查询特定范围内的日期条件
我想从HSQL数据库中获取记录,查询如下: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.
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。这对我很有效。您的第一个查询实际上是解决“开始和结束之间的日期,包括:”。非常感谢!。