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

Tìm ngày giữa hai ngày (Phương pháp hay nhất)

Bạn đang yêu cầu các phương pháp hay nhất. Tôi nghĩ những điều sau đây là phương pháp hay nhất:

"Date" >= DATE '2014-04-11' AND "Date" < DATE '2014-04-12' + 1

Đầu tiên, hãy lưu ý việc sử dụng DATE từ khóa. Câu hỏi của bạn là về ngày tháng và bạn đang sử dụng định dạng ngày tháng mà Oracle không hỗ trợ trực tiếp. Rất vui, Oracle hỗ trợ tiêu chuẩn ANSI DATE từ khóa với định dạng tiêu chuẩn ISO.

Thứ hai, tôi đã thêm một +1 để bạn có thể thấy khoảng thời gian kết thúc, có lẽ là khoảng thời gian bạn muốn xem trong mã. Nó sẽ không ảnh hưởng đến hiệu suất vì + 1 là một hằng số.

Thứ ba, hằng số ngày có một thành phần thời gian. Khi không có gì được chỉ định, đó là nửa đêm của ngày. Vì vậy, biểu thức:

"Date" BETWEEN '2014-04-11' AND '2014-04-12'

Thực sự là:

"Date" >= TIMESTAMP '2014-04-11 00:00:00' AND "Date" <= TIMESTAMP '2014-04-12 00:00:00'

Có nghĩa là, chính xác một thời gian kể từ ngày sau đó được bao gồm, tức thời gian đầu tiên vào lúc nửa đêm. Đây thường không phải là điều bạn muốn. Oracle làm cho vấn đề này trở nên tồi tệ hơn theo hai cách:

  1. date kiểu dữ liệu bao gồm một thành phần thời gian.
  2. Cách trình bày date mặc định giá trị không có thành phần thời gian.

Vì vậy, để an toàn nhất, hãy sử dụng các quy tắc sau:

  • Không sử dụng between vào các ngày.
  • Sử dụng >= cho buổi hẹn hò đầu tiên.
  • Người dùng < cho lần thứ hai.

Aaron Bertrand có một blog về chính xác chủ đề này. Mặc dù nó nói riêng về SQL Server, nhiều ý tưởng áp dụng cho Oracle - đặc biệt là vì date kiểu dữ liệu trong Oracle bao gồm thời gian.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng OracleParameter với C # TimeSpan - Literal không khớp

  2. Làm thế nào để thực hiện oracle TNSPING với java?

  3. Thay đổi loại cột trong bảng

  4. Oracle 11g TẠO CHẾ ĐỘ XEM bằng cách sử dụng CONNECT BY và nhiều bảng

  5. Kiểu dữ liệu .NET nào tốt nhất để ánh xạ kiểu dữ liệu NUMBER Oracle trong NHibernate?