2010-01-11 15 views
2

顯示的行我需要在Oracle中的觀點,即從最後一個工作日顯示所有行。查看Oracle中從最後一個工作日

所以對於週二應該是這樣的,因爲我需要從週一的所有條目:

select * from table_1 where to_char(Mydate,'yyyy-mm-dd') = to_char(sysdate-**1**,'yyyy-mm-dd'); 

但如果是星期一那麼我需要從上週五的所有條目。

select * from table_1 where to_char(Mydate,'yyyy-mm-dd') = to_char(sysdate-**3**,'yyyy-mm-dd');  

如何使一個視圖始終顯示上個工作日的正確行?

回答

2
SELECT * 
FROM table_1 
WHERE mydate >= SYSDATE - CASE WHEN TO_CHAR(SYSDATE, 'D') > 6 THEN 3 ELSE 1 END 
     AND mydate < SYSDATE - CASE WHEN TO_CHAR(SYSDATE, 'D') > 6 THEN 3 ELSE 1 END + 1 
2

你可以使用CASE:

SQL> WITH table_1 AS 
    2 (SELECT SYSDATE - 20 + ROWNUM mydate FROM dual CONNECT BY ROWNUM <= 40) 
    3 SELECT * 
    4 FROM table_1 
    5 WHERE trunc(Mydate) = 
    6   CASE WHEN to_char(SYSDATE, 'D') = to_char(DATE '2000-01-02', 'D') 
    7    THEN -- sunday 
    8    trunc(SYSDATE - 2) 
    9   WHEN to_char(SYSDATE, 'D') = to_char(DATE '2000-01-03', 'D') 
10    THEN -- monday 
11    trunc(SYSDATE - 3) 
12   ELSE 
13    trunc(SYSDATE - 1) 
14   END; 

MYDATE 
----------- 
08/01/2010 

注意:根據您的NLS設置,to_char(X, 'D')可爲週一或週日返回1。依靠一個已知的星期一(例如:在我的情況下爲2000-01-03)將使這個查詢在任何設置下都能工作。

相關問題