sql >> データベース >  >> RDS >> PostgreSQL

日付パラメータをネイティブクエリに渡す

    ZonedDateTimeをネイティブSQLクエリに渡すことはできません。カレンダーに変換する必要があります:

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

    また、ZonedDateTimeを次のように変換できます:

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

    このアプローチについては、次のように説明します。リンク




    1. PL/SQLパッケージレベルのレコードタイプに関するメタデータ

    2. Like関数の作成phpmysqlajax

    3. Postgres:1対多の検索のためのfloat配列のコサイン類似性のインデックス

    4. PHPのPDOで使用するMySQLデータベースを選択するにはどうすればよいですか?