Einsatz von Hibernate HQL, um Datensätze auszuwählen, wo zwei Termine sind innerhalb eines festgelegten Intervalls
Ich versuche zu verwenden, HQL, um Datensätze zu finden, wo zwei Datum-Felder sind innerhalb 1 Monats.
Query query = session.createQuery("from com.ep.cqprojects.db.Projects "
+ "where active_date - kickoff_meeting_date < interval '1' month ");
Leider ist die Datenbank anscheinend nicht verstehen Intervall.
Wie kann ich Vergleiche das Intervall zwischen zwei Datums-Felder?
InformationsquelleAutor Richard | 2009-07-28
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Muss es sein, einen Kalender-Monat? Ich fürchte es gibt keine gute HQL-nur in diesem Fall die Lösung. Die nächste Sache, die Sie bekommen können ist:
month()
ANSI-SQL-Funktionen und-so hoffentlich-sollten unterstützt werden, indem Ihre Datenbank-engine (im übrigen: welche Datenbank ist das denn?) Zweite Bedingung ist notwendig, um Unkraut aus den Fällen, woactive_date
ist der Letzte Tag des vorherigen Monats und derkickoff_meeting_date
ist der erste Tag des nächsten Monats mit Monats-zwischen Ihnen weniger als 31 Tage lang.Können Sie dies weiter auszubauen, um im Umgang mit Zeit, wenn Sie benötigen. Letztlich jedoch können Sie besser dran, bekommen Ungefähre Ergebnisse und weitere re-prüfen /filtern Sie können in Ihrem code.
Ach, JPQL ist noch nicht ganz dort. Zum vergleichen zweier Datum-Felder genau benötigen eine Abfrage zu bringen, die Personen in Frage, die in (Datum oder TIMESTAMP) Java/JPA Objekt-Typen und dann vergleichen Sie (mit der Empfehlung, die Nutzung der Java-Kalender oder JodaTime) Kalender-Klassen. Dort angekommen, Subtraktion eines Monats von einem von dem Kalender und dann vergleicht man die Differenz (in Tagen, Stunden, etc) zwischen den beiden ergeben ein genaues Ergebnis. Siehe Java-Kalender.add() und Kalender.vor() oder nach () - Methoden.