sql >> Database teknologi >  >> RDS >> PostgreSQL

Spring Data Rest:Datoen er null-forespørgsel kaster en postgres-undtagelse

Jeg har brugt noget tid på at kigge på dette, fordi jeg virkelig gerne vil sammenligne "datoen er null" i forespørgsler, og det er resultatet:

Når du bruger "cast(foo.date som dato) er null ", det virker OK, hvis feltet ikke er null. Hvis feltet er null, bliver denne undtagelse kastet:

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

Løsningen er brug coalesce:

coalesce(:date, null) is null

Det fungerer fint at have eller ej data i feltet testet.

Eksempel på mit forespørgsel:

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

Håber det virker for dig!



  1. problemer med at oprette overskrifter ved hjælp af spool i sqlplus

  2. sql varchar(max) vs varchar(fix)

  3. Cpp-Mysql udefineret reference til 'en funktion'-fejl

  4. får fejl - SQLSTATE[21000]:Kardinalitetsovertrædelse:1241 Operand skal indeholde 1 kolonne(r)