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'
保存または取得するときに、java.util.date を java.sql.date 形式に変換します。
上記のクエリは、正確な日付に一致するレコードを取得するために正常に機能します。つまり、START_TIME=? または END_TIME=? ただし、レコードが存在していても、日付範囲 (START_TIME < ? AND END_TIME > ?) では機能しません。
データベース内のレコードは、END DATE AS '2013-05-27 00:00:00.000000000'、START DATE AS '2013-05-23 00:00:00.000000000' のように存在します。
また、パラメータ値は「2013-05-24」で、上記のレコード間では取得できませんでした。
また、別のレコード - END DATE AS '2013-05-30 00:00:00.000000000', START DATE AS '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)))
{
....
}
データベースでは、START_DATE と END_DATE の両方のフィールドが「DATETIME」型です。
ここで何が間違っているのか...
ありがとう