Một bảng có cột dấu thời gian. Giá trị mẫu trong đó có thể là 2010-03-30 13:42:42. Với Hibernate, tôi đang thực hiện một truy vấn phạm vi Restrictions.between ("column-name", fromDate, toDate).Truy vấn ngày với Hibernate trên cột dấu thời gian trong PostgreSQL
Ánh xạ Hibernate cho cột này như sau.
<property name="orderTimestamp" column="order_timestamp" type="java.util.Date" />
Giả sử, tôi muốn tìm hiểu tất cả các bản ghi có ngày 30 tháng 3 năm 2010 và ngày 31 tháng 3 năm 2010. Truy vấn phạm vi trên trường này được thực hiện như sau.
Date fromDate = new SimpleDateFormat("yyyy-MM-dd").parse("2010-03-30");
Date toDate = new SimpleDateFormat("yyyy-MM-dd").parse("2008-03-31");
Expression.between("orderTimestamp", fromDate, toDate);
Điều này không hiệu quả.
Truy vấn được chuyển đổi thành dấu thời gian tương ứng là "2010-03-30 00:00:00" và "2010-03-31 00:00:00". Vì vậy, tất cả các hồ sơ cho ngày 31 tháng 3 năm 2010 đều bị bỏ qua.
Một giải pháp đơn giản cho vấn đề này có thể là có ngày kết thúc là "2010-03-31 23:59:59." Nhưng, tôi muốn biết nếu có cách nào chỉ khớp với phần ngày của cột dấu thời gian.
Ngoài ra, là Expression.between()
có bao gồm cả hai giới hạn không? Tài liệu không ném bất kỳ ánh sáng nào về điều này.
Tôi tin rằng giữa hai lần luôn độc quyền trên cả hai giới hạn. Tại sao bạn không loại bỏ 1 mili giây và thêm 1 mili giây cho mỗi người trong số họ? – jishi
@jishi nó phụ thuộc vào cơ sở dữ liệu (và phần lớn thời gian tôi tin). –
Shashikant bạn có thể giải quyết vấn đề này không? – changeme