PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Spring Data Rest:Date is null query lança uma exceção postgres


Passei algum tempo olhando para isso porque realmente quero comparar "date is null" em consultas e esse é o resultado:

Quando você usa o "cast(foo.date as date) é nulo ", funciona bem se o campo não for nulo. Se o campo for nulo, esta exceção é lançada:
org.postgresql.util.PSQLException: ERROR: cannot cast type bytea to date

A solução é usar coalescer:
coalesce(:date, null) is null

Funciona bem tendo ou não dados no campo testado.

Meu exemplo de consulta:
@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)"
        + "                 )"
        + "             )"
        + "       ) "

Espero que funcione para você!