PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Spring Data Rest:Date is null zapytanie zgłasza wyjątek postgres

Spędziłem trochę czasu, patrząc na to, ponieważ naprawdę chcę porównać „data jest pusta” w zapytaniach i to jest wynik:

Gdy używasz „cast(foo.date as date) is null ", działa dobrze, jeśli pole nie jest puste. Jeśli pole jest puste, zgłaszany jest wyjątek:

org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date

Rozwiązaniem jest użycie koalescencji:

coalesce(:date, null) is null

Działa dobrze, mając lub nie dane w testowanym polu.

Przykład mojego zapytania:

@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)"
        + "                 )"
        + "             )"
        + "       ) "

Mam nadzieję, że to działa dla Ciebie!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak przekonwertować wielkość liter w PostgreSQL

  2. Ta sama osoba o różnych zachowaniach

  3. Inny sposób rzutowania varbit na int? A Bigint?

  4. Jak przeprowadzić migrację atrybutu modelu ActiveRecord z json do jsonb?

  5. Jak zezwolić na zdalny dostęp do bazy danych PostgreSQL