سؤال

لدي جدول الجلسات. تحتوي كل جلسة على "Session_start_time" و "session_end_time". في حين أن الجلسة مفتوحة ، فإن وقت النهاية فارغ. أريد أن أحضر قائمة الجلسات ، وأطلبها بالمنطق التالي:

  1. إذا كانت الجلسة مفتوحة (لا يوجد وقت نهاية) ، فاطلبها بحلول وقت البدء.
  2. إذا تم إغلاق الجلسة ، فاطلبها بحلول وقت الانتهاء.

شيء مثل:

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

أنا أستخدم JPA و JPQL للاستعلامات ، واستخدام Hibernate للتنفيذ. ماذا تنصح؟

ملاحظة: أفضل عدم إضافة حالة إلى SELECT ، ولكن بدلاً من ذلك أبقيها نظيفة حتى أحصل على قائمة بالجلسات دون حقول إضافية غير ضرورية.

هل كانت مفيدة؟

المحلول

اطلب بواسطة NVL (session_end_time ، session_start_time)

NVL هي وظيفة أوراكل. أنا متأكد من أن هناك وظائف مثل تلك الخاصة بـ DBMs الأخرى

وجدت هذا واحد من أجل السبات: NVL في السبات: كيفية محاكاة NVL في HQL

ترتيب حسب: https://forum.hibernate.org/viewtopic.php؟f=25&t=997220&start=0

نصائح أخرى

يفعل

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

العمل في DBMS الخاص بك؟ هذا لا يضيف حقل.

وإلا يمكنك حسابه داخل استعلام متداخل ، ولكن لا تدرجه في النهائي SELECT بند:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top