sql >> Databasteknik >  >> RDS >> PostgreSQL

Skicka datumparameter till inbyggd fråga

Du kan inte skicka en ZonedDateTime till en inbyggd SQL-fråga. Du måste konvertera den till 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);

Och du kan konvertera din ZonedDateTime på detta sätt:

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;
}

Detta tillvägagångssätt beskrivs här:länk




  1. Hur redigerar man en lagrad procedur i MySQL?

  2. Tomcat kan inte hitta gdk_custom.jar, Oracle kan inte skapa den?

  3. SQL Server med DateTime som primär nyckel

  4. PostgreSQL:Släpp PostgreSQL-databasen via kommandoraden