Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tiêu chí ngủ đông cho ngày

Tại sao bạn sử dụng Restrictions.like(... )?

Bạn nên sử dụng Restrictions.eq(...) .

Lưu ý rằng bạn cũng có thể sử dụng .le , .lt , .ge , .gt trên các đối tượng ngày như các toán tử so sánh. LIKE toán tử không thích hợp cho trường hợp này vì LIKE rất hữu ích khi bạn muốn đối sánh kết quả theo từng phần nội dung của cột. Vui lòng xem http://www.sql-tutorial.net/SQL-LIKE.asp để tham khảo.

Ví dụ:nếu bạn có cột tên với tên đầy đủ của một số người, bạn có thể thực hiện where name like 'robert %' để bạn sẽ trả lại tất cả các mục nhập có tên bắt đầu bằng 'robert ' (% có thể thay thế bất kỳ ký tự nào).

Trong trường hợp của bạn, bạn biết toàn bộ nội dung của ngày bạn đang cố gắng khớp, vì vậy bạn không nên sử dụng LIKE nhưng bình đẳng. Tôi đoán Hibernate không cung cấp cho bạn bất kỳ ngoại lệ nào trong trường hợp này, nhưng dù sao thì bạn có thể sẽ gặp vấn đề tương tự với Restrictions.eq(...) .

Đối tượng ngày của bạn mà bạn nhận được với mã:

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

Đối tượng ngày này tương đương với ngày 17-04-2011 tại 0h, 0 phút, 0 giây và 0 nano giây.

Điều này có nghĩa là các mục nhập của bạn trong cơ sở dữ liệu phải có chính xác ngày đó. Ý tôi là nếu mục nhập cơ sở dữ liệu của bạn có ngày "17-April-2011 19:20:23.707000000", thì nó sẽ không được truy xuất vì bạn chỉ yêu cầu ngày đó:"17-April-2011 00:00:00.0000000000 ".

Nếu bạn muốn truy xuất tất cả các mục nhập trong cơ sở dữ liệu của mình từ một ngày nhất định, bạn sẽ phải sử dụng mã sau:

    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. Oracle Streams Step by Step Replication Ví dụ

  2. Sử dụng các tham số với kết nối ODBC Oracle

  3. Trailing Zero

  4. Sử dụng Oracle kết hợp ba bảng thành một với PIVOT

  5. Oracle DateTime trong mệnh đề Where?