Question

J'ai une table des sessions. Chaque session a "session_start_time" et "session_end_time". Bien que la séance est ouverte, l'heure de fin est vide. Je veux aller chercher la liste des sessions, et l'ordre par la logique suivante:

  1. Si la session est ouverte (pas de fin), pour le temps de démarrage.
  2. Si la session est fermée, commande par la fin des temps.

Quelque chose comme:

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

J'utilise JPA et JPQL pour les requêtes, et l'utilisation d'Hibernate pour l'exécution. Que recommanderiez-vous?

NOTE : Je préfère ne pas ajouter à la CASE SELECT, mais plutôt le garder propre donc j'obtenir une liste des sessions sans champs supplémentaires non nécessaires.

Était-ce utile?

La solution

ORDER BY nvl (session_end_time, session_start_time)

NVL est une fonction Oracle. Je suis sûr que ther sont des fonctions comme pour les autres SGBD

trouvé celui-ci pour mise en veille prolongée: NVL à HIBERNATE: Comment simuler NVL dans HQL

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

Autres conseils

Est

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

travail dans votre SGBD? Cela n'ajoute un champ.

Sinon, vous pouvez le calculer dans une requête imbriquée, mais ne pas inclure dans la clause de SELECT final:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top