2012-03-05 30 views

Trả lời

12

Trong Oracle, chúng tôi có thể biến ngày thành số và áp dụng số học cho chúng theo nhiều cách khác nhau.

Ví dụ sysdate-7 cung cấp cho chúng tôi ngày bảy ngày trước. trunc(some_date) xóa phần tử thời gian khỏi cột ngày. Và to_char(some_date, 'SSSSS') cho chúng ta phần tử thời gian của nó như số giây kể từ nửa đêm. Vì vậy, 06:45:00 là 24300 giây và 18:15:59 là 69359 giây (hãy kiểm tra những con số đó, vì chúng là figgerin ngược lại).

Dù sao, đặt tất cả lại với nhau trong một truy vấn như thế này ...

select * 
from your_table 
where creation_date >= trunc(sysdate)-7 
and to_number(to_char(creation_date, 'sssss')) between 24300 and 69359 

... wil sản xuất tất cả các hồ sơ được tạo ra trong tuần trước với một yếu tố thời gian trong vòng vài giờ cốt lõi.

+0

+1, nhưng điều đó sẽ không mang lại hồ sơ từ tuần này không? –

+1

Cũng có sự mơ hồ trong "tuần trước". Tôi lấy nó để có nghĩa là "bảy ngày qua" nhưng bạn có lẽ có ý nghĩa gì đó khác. – APC

+0

cảm ơn các bạn, nó hoạt động như tôi muốn, "bảy ngày qua" là những gì tôi muốn nói. –

0

Dựa trên các tiêu chí ở trên, điều này sẽ mang lại hồ sơ từ tuần trước giữa Chủ Nhật và Thứ Bảy trong các giờ 06:45:00 và 19:15:59.

Bạn có thể điều chỉnh "- 7" và "+ 6" thành các số khác nhau nếu bạn muốn phạm vi tuần khác nhau (ví dụ: nếu tuần của bạn là từ Thứ Hai đến Chủ Nhật).

select * 
from your_table 
where creation_date >= TRUNC(SYSDATE, 'WW') - 7 
and creation_date <= (TRUNC(SYSDATE, 'WW') - 7) + 6 
and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
+0

cảm ơn bạn đã trả lời, nhưng tôi có các ngày khác nhau trong bảng không phải là ngày cụ thể như ngày 27/2/2012 –

+0

@MMC - vì vậy, bạn muốn điều này là động? Giống như, bạn có muốn chỉ cần lấy hồ sơ được 7 ngày tuổi bất kể ngày bạn chạy nó? –

+0

có những thứ được tạo vào tuần trước nhưng cũng nếu tôi thay thế ngày 27/2/2012 ngày hôm nay, tôi không muốn lấy hồ sơ ví dụ được tạo hôm qua lúc 06:30 –

3

Truy vấn này sẽ trả về bất kỳ bản ghi nào được tạo trong 7 ngày qua cùng với phần thời gian của ngày tạo trong khoảng từ 6:45 sáng đến 7:15 tối.

select * 
    from your_table 
where creation_date > sysdate - 7 
    and to_char(creation_date, 'hh24:mi:ss') >= '06:45:00' 
    and to_char(creation_date, 'hh24:mi:ss') <= '19:15:00' 
+0

+1, nhưng điều đó sẽ không mang lại hồ sơ từ tuần này không? –

Các vấn đề liên quan