2014-11-05 97 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()方法,我得到了全表扫描,而在这里使用这种方法时,我得到了日期列上索引的完整扫描。

相关问题