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

Send datoparameter til indbygget forespørgsel

Du kan ikke overføre en ZonedDateTime til en indbygget SQL-forespørgsel. Du skal konvertere den til Kalender:

@Query(value = 
    "SELECT distinct a.* FROM action a "
    + "LEFT OUTER JOIN history h "
    + "ON a.id = h.action_id "
    + "AND h.user_id = :userId "
    + "WHERE a.occurrence='DAILY' AND (h.id IS NULL OR h.entry_date < :yesterday)", nativeQuery = true)
public List<Action> findAllAvailableActions(@Param("userId") Long userId, @Param("yesterday") Calendar yesterday);

Og du kan konvertere din ZonedDateTime på denne måde:

public Calendar convertToDatabaseColumn(ZonedDateTime entityAttribute) {
    if (entityAttribute == null) {
        return null;
    }

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(entityAttribute.toInstant().toEpochMilli());
    calendar.setTimeZone(TimeZone.getTimeZone(entityAttribute.getZone()));
    return calendar;
}

Denne tilgang er beskrevet her:link




  1. Hvordan når dette CASE-udtryk til ELSE-sætningen?

  2. Hvornår skal jeg bruge semikolon i SQL Server?

  3. Opret forbindelse til MySQL over SSH ved hjælp af Java

  4. Vælg tilfældig række fra en PostgreSQL-tabel med vægtede rækkesandsynligheder