Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kriteria Hibernasi untuk Tanggal

Mengapa Anda menggunakan Restrictions.like(... )?

Anda harus menggunakan Restrictions.eq(...) .

Catatan Anda juga dapat menggunakan .le , .lt , .ge , .gt pada objek tanggal sebagai operator perbandingan. LIKE operator tidak sesuai untuk kasus ini karena LIKE berguna ketika Anda ingin mencocokkan hasil menurut sebagian isi kolom. Silakan lihat http://www.sql-tutorial.net/SQL-LIKE.asp untuk referensi.

Misalnya jika Anda memiliki kolom nama dengan nama lengkap beberapa orang, Anda dapat melakukan where name like 'robert %' sehingga Anda akan mengembalikan semua entri dengan nama yang dimulai dengan 'robert ' (% dapat mengganti karakter apa pun).

Dalam kasus Anda, Anda tahu konten lengkap dari tanggal yang Anda coba cocokkan sehingga Anda tidak boleh menggunakan LIKE tapi kesetaraan. Saya kira Hibernate tidak memberi Anda pengecualian apa pun dalam kasus ini, tetapi bagaimanapun Anda mungkin akan memiliki masalah yang sama dengan Restrictions.eq(...) .

Objek tanggal Anda yang Anda dapatkan dengan kode:

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

Objek tanggal ini sama dengan 17-04-2011 pada 0 jam, 0 menit, 0 detik dan 0 nanodetik.

Ini berarti bahwa entri Anda dalam basis data harus memiliki tepat tanggal itu. Maksud saya adalah jika entri database Anda memiliki tanggal "17-April-2011 19:20:23.707000000", maka itu tidak akan diambil karena Anda hanya meminta tanggal itu:"17-April-2011 00:00:0,0000000000".

Jika Anda ingin mengambil semua entri database Anda dari hari tertentu, Anda harus menggunakan kode berikut:

    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Peningkatan otomatis di Oracle ke tabel yang sudah dibuat

  2. Bagaimana cara mengetahui apakah database Oracle diatur ke komit otomatis?

  3. Pivot Oracle dengan subquery

  4. Apa sintaks URL JDBC yang benar jika dompet Oracle digunakan?

  5. dapatkan sejumlah nilai unik tanpa memisahkan nilai yang termasuk dalam blok nilai yang sama