2017-12-08 14 views
1

私は、mysqlで動作する簡単なSpring Data JPAプロジェクトを持っており、日と月に一致するすべてのレジスタを取得する必要があります。私がフィルタリングする必要がある列はDatetime型です。Spring Data JPA - 月と日だけを使用して日付列からデータをフェッチする方法はありますか?

1935-12-08 00:00:00 

私はそれが正常に動作デシベルレベルでこれを実行したい場合:

SELECT * FROM my_database.event where event_date LIKE '%-12-08%'; 

それは文字列として日付を扱います。今私はリポジトリでこれを行う必要がありますが、何も動作していないようです。私は基本的なものを試しました:

List<Event> findByEventDateLike(
     @Param("eventDate") Date eventDate); 

しかし、それはDateオブジェクトなので不正な引数の例外を返します。私は他の組み合わせを試みましたが、明らかに春のデータjpaは部分的な情報と日付を比較できません。

注:私は@Query文を避けようとしていますが、それが唯一の方法であれば有効な答えです。

どうすればいいですか?

+0

あなたは「%%」のように使用したい場合は、あなたがここで詳細を見つけることができます – Osgux

+0

にタイプをチャゲする必要があります://ドキュメントを.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/jpa.repositories.html – Zeronex

+0

'findByEventDateGreaterThanAndEventDateLessThan(日付たstartDate、日付endDateに)'への変更メソッド名をについては、HTTPSどのように文字列 – Zeronex

答えて

0

データベースでクエリをエミュレートするためにnativeQueryを使用します。

@Query(value = "SELECT * FROM events WHERE event_date Like %?1%", nativeQuery = true) 
List<Match> findByMatchMonthAndMatchDay(@Param ("eventDate") String eventDate); 

DBは、LIKE句の日付/文字列間の変換を処理します。

「月の日」(例:-12-08)にパラメータを渡すと、日付フィールドにその文字列のイベントのコレクションが返されます。

2

以下のコードZonedDateTime(たstartDate)は、今のDateTimeに対してテストする機会を持っていないために動作します:

@Query("SELECT b FROM Box b " + 
     "WHERE EXTRACT (day FROM b.startDate) = :dayOfMonth AND EXTRACT (month FROM b.startDate) = :month") 
List<Box> findBoxWithParticularDayAndMonth(@Param("dayOfMonth") Integer dayOfMonth, @Param("month") Integer month); 

使用法:

List<Box> boxes = boxRepo.findBoxWithParticularDayAndMonth(22, 5); 
2

をあなたのJPAプロバイダが、その後休止状態である場合JPQL(HQL)クエリにyearmonth(およびother funcs)を使用できます。たとえば、次のようになります。

@Query("select e from Event e where year(e.eventDate) = ?1 and month(e.eventDate) = ?2") 
List<Entity> getByYearAndMonth(int year, int month); 
1

のJava:文字列 私にとってConvert java.util.Date to String

@Query("select e from Event e where e.eventDate like %:eventDate%") 
List<Entity> findByEventDateLike(@Param("eventDate")String eventDate); 

の日は簡単な方法は、文字列に解析日ですが、私はあなたが

を含む

%Like% Query in spring JpaRepository https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

を試すことができ、別の解決策を見つけました

findByFirstnameContaining

... x.firstname like?1(パラメータバインドは%で囲みます)

関連する問題