PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Spring Data Rest:la date est une requête nulle lève une exception postgres

J'ai passé du temps à regarder ça parce que je veux vraiment comparer "la date est nulle" dans les requêtes et c'est le résultat :

Lorsque vous utilisez le "cast(foo.date as date) is null ", cela fonctionne bien si le champ n'est pas nul. Si le champ est nul, cette exception est levée :

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

La solution est d'utiliser coalesce :

coalesce(:date, null) is null

Cela fonctionne bien d'avoir ou non des données dans le champ testé.

Mon exemple de requête :

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

J'espère que cela fonctionnera pour vous !