sql >> Base de Datos >  >> RDS >> PostgreSQL

Resto de datos de primavera:la consulta de fecha es nula arroja una excepción de postgres

Pasé un tiempo mirando esto porque realmente quiero comparar "la fecha es nula" en las consultas y ese es el resultado:

Cuando usas "cast(foo.date as date) is null ", funciona bien si el campo no es nulo. Si el campo es nulo, se lanza esta excepción:

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

La solución es usar coalesce:

coalesce(:date, null) is null

Funciona bien teniendo o no datos en el campo probado.

Mi ejemplo 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 te funcione!