sql >> Databáze >  >> RDS >> PostgreSQL

Spring Data Rest:Date is null dotaz vyvolá výjimku postgres

Strávil jsem nějaký čas tím, že jsem se na to podíval, protože opravdu chci porovnat "datum je null" v dotazech a to je výsledek:

Když použijete "cast(foo.date as date) je null ", funguje to OK, pokud pole není null. Pokud je pole null, je vyvolána tato výjimka:

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

Řešením je použití sloučení:

coalesce(:date, null) is null

Funguje to dobře s nebo bez dat v testovaném poli.

Příklad mého dotazu:

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

Doufám, že vám to bude fungovat!



  1. EXISTS vs JOIN a použití klauzule EXISTS

  2. Při kontrole připojení se nelze připojit k žádnému ze zadaných hostitelů MySQL

  3. Jak TO_SECONDS() funguje v MariaDB

  4. Strana Vztah Vzor. Jak modelovat vztahy