2014-11-05 89 views
1

我想從週六或週日的一天中獲取表格中的行數。星期六和星期日的行數總和

下面的代碼不起作用。

任何想法如何實現這一目標?

SELECT next_day(sysdate-8, 'SUN') from dual; 

NEXT_DAY(SYSDATE-8,) 
------------------- 
2014/11/02 21:22:30 

我嘗試:

select sum(QTY),GROUP from table where next_day(order_date-8, 'SUN') group by GROUP; 
+0

你的問題是什麼?您應該編輯您的問題並添加樣本數據和期望的結果。 – 2014-11-05 21:32:22

+0

不是一個真正的重複,但與我認爲你想實現的東西非常相關:[確定Oracle日期是否在週末](http://stackoverflow.com/questions/3450965/determine-if-oracle-date-是,上一個週末)。 – GolezTrol 2014-11-05 21:34:05

回答

2

僅過濾週日/週六則可能需要TO_CHAR()

select sum(QTY),GROUP 
from table 
where TO_CHAR(order_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN') in ('SUN','SAT') 
group by GROUP; 
+1

警告:由於to_char的結果取決於NLS設置,因此這不是防水解決方案。在StackOverflow上有很多答案提供了NLS不可知的方法來做到這一點。 – GolezTrol 2014-11-05 21:35:55

+0

@GolezTrol同意。 – 2014-11-05 21:36:51

+0

謝謝噸,其工作, – 2014-11-05 23:12:51

0

我想你可以使用NEXT_DAY()功能如下:

SELECT SUM(qty), group 
    FROM table 
WHERE order_date = NEXT_DAY(order_date - 1, 'SAT') 
    OR order_date = NEXT_DAY(order_date - 1, 'SUN') 
GROUP BY group 

如果您在order_date列上有索引,甚至可能會避免全表掃描。我只是在類似的表上試過,並使用上面的TO_CHAR()方法,我得到了全表掃描,而在這裏使用這種方法時,我得到了日期列上索引的完整掃描。

相關問題