2009-08-26 42 views
5

Nếu tôi có bảng có cột Ngày được gọi là myDate, với các giá trị như 2009-08-25 09:00:09.0.Phạm vi ngày trong PL/SQL (Oracle)

Tôi muốn chọn tất cả các hàng cho 25 tháng 8, từ 00:00:01 cho đến khi 11:59:59 và NOTHING cho 26 Tháng Tám. Là nó đủ để chỉ cần sử dụng các điều kiện:

where myDate between Date '2009-08-25' and Date '2009-08-26' 

Và tôi muốn chọn tất cả các hàng TRƯỚC 25 tháng 8, không bao gồm tháng tám 25. Tôi có thể làm:

where myDate < Date '2009-08-25' 

Trả lời

11

nếu bạn muốn dữ liệu cho đầy đủ các ngày 25 và loại trừ tất cả các 26, bạn cần phải loại bỏ các thứ hai đầu tiên của 26:

where myDate >= Date '2009-08-25' and myDate < Date '2009-08-26' 

hoặc

where myDate between Date '2009-08-25' and Date '2009-08-26' - interval '1' second 

Cập nhật - Một chính xác chút: Trong Oracle DATE datatype được sử dụng cả cho 'Ngày' loại có hoặc không có thời gian. Nếu bạn đang xử lý các ngày không có thời gian, nó thường được lưu trữ với một phân đoạn thời gian 00:00, có nghĩa là nửa đêm. Bởi vì điều này, đầu tiên giữa (my_date between '2009-08-25' and '2009-08-26') sẽ có khả năng chọn hai ngày đầy đủ.

Bằng cách loại bỏ các thứ hai đầu tiên của 26, bạn đảm bảo rằng bạn sẽ không vô tình chọn hàng từ 26.

+0

Ý bạn là gì khi bắt đầu ngày 26. Nếu bạn không bao gồm - 1/24/60/60 trong truy vấn thứ hai của mình, có vấn đề gì? – Saobi

+0

số 26 bắt đầu lúc 00:00, vì vậy nếu bạn muốn loại trừ TẤT CẢ 26, bạn phải loại bỏ rõ ràng rằng –

+0

thứ hai có, nó bao gồm CHỈ 8-26 12:00:00 SA. Không một phút sau. Cơ hội của một hàng xảy ra chính xác vào nửa đêm là thấp, vì vậy đó là ok? – Saobi

-2
SELECT * 
FROM TABLE 
WHERE myDate BETWEEN myDate ('08/25/2009', 'MM/DD/YYYY') 
         AND myDate ('08/26/2009', 'MM/DD/YYYY') 
+0

là cái này có thật không? – cr0ss

+0

Anh quên TO_DATE trước dấu ngoặc vuông –

1

Để có được tất cả mọi thứ giữa 25 tháng 8, tại 12:00:01 cho đến ngày 11 : 59: 59 PM, bao gồm, hãy thử điều này:

Where myDate Between to_Date('yyyymmddhh24miss', '20090825000001') 
        And to_Date('yyyymmddhh24miss', '20090825235959') 

(Tại sao bạn không bao gồm nửa đêm vào ngày 25? Thứ hai đầu tiên (00:00:00) cũng là một phần của ngày 25 ...)

Để nhận mọi thứ trước tháng 8 25, hãy thử điều này:

Where myDate < to_Date('yyyymmdd', '20090825') 
Các vấn đề liên quan