PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przekaż parametr daty do zapytania natywnego

Nie można przekazać ZonedDateTime do natywnego zapytania SQL. Musisz przekonwertować go na Kalendarz:

@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);

I możesz przekonwertować swój ZonedDateTime w ten sposób:

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

To podejście jest opisane tutaj:link




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć sekwencję używając wartości początkowej z zapytania?

  2. Ustaw domyślny limit dla pg_trgm

  3. Zaktualizuj kolumnę tabeli o kolumnę innej tabeli w PostgreSQL

  4. Python/postgres/psycopg2:uzyskiwanie identyfikatora właśnie wstawionego wiersza

  5. Połączenie z postgresem z maszynopisu zawiesza się