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

日付のHibernate基準

    なぜRestrictions.like(...)を使用するのですか )?

    Restrictions.eq(...)を使用する必要があります 。

    .leも使用できることに注意してください 、.lt.ge.gt 比較演算子としての日付オブジェクト。 LIKE LIKEであるため、演算子はこの場合には適切ではありません 列の部分的な内容に従って結果を照合する場合に役立ちます。参照については、http://www.sql-tutorial.net/SQL-LIKE.aspを参照してください。

    たとえば、一部の人のフルネームを含む名前列がある場合は、where name like 'robert %'を実行できます。 'robert 'で始まる名前のすべてのエントリを返すようにします (% 任意の文字を置き換えることができます。

    あなたの場合、一致させようとしている日付の完全な内容を知っているので、LIKEを使用しないでください しかし平等。この場合、Hibernateは例外を与えないと思いますが、とにかく、Restrictions.eq(...)でも同じ問題が発生する可能性があります。 。

    コードで取得した日付オブジェクト:

    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
    String myDate = "17-04-2011";
    Date date = formatter.parse(myDate);
    

    この日付オブジェクトは、2011年4月17日の0時間、0分、0秒、および0ナノ秒に相当します。

    これは、データベースのエントリが正確にある必要があることを意味します その日付。つまり、データベースエントリの日付が「2011年4月17日19:20:23.707000000」の場合、その日付を要求するだけなので取得されません:「2011年4月17日00:00: 00.0000000000"。

    特定の日からデータベースのすべてのエントリを取得する場合は、次のコードを使用する必要があります。

        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
        String myDate = "17-04-2011";
        // Create date 17-04-2011 - 00h00
        Date minDate = formatter.parse(myDate);
        // Create date 18-04-2011 - 00h00 
        // -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class
        Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
        Conjunction and = Restrictions.conjunction();
        // The order date must be >= 17-04-2011 - 00h00
        and.add( Restrictions.ge("orderDate", minDate) );
        // And the order date must be < 18-04-2011 - 00h00
        and.add( Restrictions.lt("orderDate", maxDate) ); 
    


    1. MySQLで主キーを無視して重複行を見つける7つの方法

    2. PostgreSQL9.3を使用した動的ピボットクエリ

    3. SQLite-データベースをファイルにバックアップ

    4. PRAGMAEXCEPTION_INITを使用してユーザー定義の例外を宣言する方法