Frage

Ich habe eine Tabelle von Sessions haben. Jede Sitzung hat „session_start_time“ und „session_end_time“. Während die Sitzung geöffnet ist, ist die Endzeit leer. Ich will die Liste der Sitzungen holen, und um es durch die folgende Logik:

  1. Wenn die Sitzung geöffnet ist (keine Endzeit), um die Startzeit.
  2. Wenn die Sitzung geschlossen wird, um die Endzeit.

So etwas wie:

 ORDER BY (session_end_time == null) ? session_start_time : session_end_time

Ich bin mit JPA und JPQL für die Abfragen, und mit Hibernate für die Ausführung. Was würden Sie empfehlen?

Hinweis : Ich würde lieber nicht CASE SELECT hinzufügen, aber es stattdessen sauber halten, damit ich eine Liste der Sitzungen ohne zusätzliche nicht benötigten Felder erhalten.

War es hilfreich?

Lösung

ORDER BY NVL (session_end_time, session_start_time)

NVL ist eine Oracle-Funktion. Ich bin sicher, Ther sind Funktionen wie die für andere DBMS

Gefunden dieses für Hibernate: NVL in HIBERNATE: wie Simulieren NVL in HQL

ORDER BY: https://forum.hibernate.org/ viewtopic.php? f = 25 & t = 997220 & start = 0

Andere Tipps

Does

ORDER BY CASE 
    WHEN session_end_time IS NULL THEN session_start_time 
    ELSE session_end_time 
END 

Arbeit in Ihrem DBMS? Hinzufügen, dass kein Feld.

Ansonsten kann man es sich in einer verschachtelten Abfrage berechnen, aber es nicht in der endgültigen SELECT-Klausel:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top