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

JPACriteriaAPIを使用して文字列の日付フィールドを検索する方法

    さて、さまざまな戦略を何度も試した後、これが最終的に機能したことです。

    この投稿を見たここ そして突然JPAを思い出しました Tuple 複数の結果タイプを返すことができるオブジェクトであるインターフェース。だから私のlikeを実行するには 比較してください。日付を文字列に単純にキャストすることはできないため、ここに手順を示します。

    1. 列をTupleとして取得します
    2. タプルオブジェクトをチェックして、日付から割り当て可能かどうかを確認します
    3. そうである場合は、Date-Format式を取得し、それをlikeに渡します。 表現。

    つまり、基本的に、これが私が最初に持っていたもので、明らかに失敗していました。

    predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%")); 
    

    さて、これは私が持っているもので、美しく機能します;

    Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
    if(tuple.getJavaType().isAssignableFrom(Date.class)){
        Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
        predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
    }
    

    注-価値のある考慮事項 -

    1. 検索が開始される場所から、すべての日付がこのフォームで表示されることを認識しています07/10/2015 10:25:09 PM したがって、比較のために日付をフォーマットする方法をlikeで知ることができます。 "'%d/%m/%Y %r'"としての式 。
    2. これは、Datesで機能する1つのステップにすぎません。 int、long、char ...などの他のほとんどのタイプはすべて文字列に直接キャストできます。さらに多くのタイプのデータを探索するにつれて、文字列に直接キャストできない他のタイプについても同じことを確実に行います。 。

    これは私にとっては完璧に機能しますが、これを正解としてマークする前に、さらに広範なテストを行い、その過程で、私の戦略について予約をしている人からのコメントを受け付けます。

    そして最後に、これが何らかの形で助けてくれたその一人に...乾杯!



    1. 関係のある単純なMySQL更新ランク

    2. Rails3.2Postgres保存エラーActiveRecord::StatementInvalid:PG ::Error:ERROR:位置5の「T」付近の構文エラー

    3. MySQLにmm/dd/yyyy形式の日付を挿入する

    4. SQLServerの再帰的自己結合