मैंने इसे देखने में कुछ समय बिताया है क्योंकि मैं वास्तव में क्वेरी में "तारीख शून्य है" की तुलना करना चाहता हूं और यह परिणाम है:
जब आप "cast(foo.date as date) का उपयोग करते हैं तो यह शून्य होता है ", यदि फ़ील्ड शून्य नहीं है तो यह ठीक काम करता है। यदि फ़ील्ड शून्य है तो यह अपवाद फेंक दिया जाता है:
org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date
समाधान का उपयोग सहसंयोजन है:
coalesce(:date, null) is null
परीक्षण किए गए क्षेत्र में डेटा होने या न होने पर यह ठीक काम करता है।
मेरी क्वेरी का उदाहरण:
@Query("SELECT c "
+ " FROM Entity c "
+ " WHERE "
+ " and ( (coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is null) "
+ " or ((coalesce(c.date, null) is not null) "
+ " and ( "
+ " ((coalesce(:dateFrom, null) is null and coalesce(:dateUntil, null) is not null) and c.date <= :dateUntil) "
+ " or ((coalesce(:dateUntil, null) is null and coalesce(:dateFrom, null) is not null) and c.date >= :dateFrom)"
+ " or (c.date between :dateFrom and :dateUntil)"
+ " )"
+ " )"
+ " ) "
आशा है कि यह आपके लिए काम करेगा!