周六和周日的行总和

Posted

技术标签:

【中文标题】周六和周日的行总和【英文标题】:Sum of rows on Saturdays and Sundays 【发布时间】:2014-11-05 21:25:24 【问题描述】:

我正在尝试从我的表中获取周六或周日等一天的行数。

下面的代码不起作用。

知道如何实现这一目标吗?

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;

【问题讨论】:

你的问题是什么?您应该编辑您的问题并添加示例数据和所需的结果。 不是真正的重复,但与我认为您想要实现的目标非常相关:Determine if Oracle date is on a weekend。 【参考方案1】:

要仅过滤周日/周六,您可能需要TO_CHAR()

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

【讨论】:

警告:这不是防水解决方案,因为 to_char 的结果取决于 NLS 设置。 *** 上有许多答案提供了与 NLS 无关的方法来做到这一点。 感谢吨,它的工作,order_date 是 partition_key,因为它现在被用作函数。此查询正在进行全表扫描。有什么方法可以在不使用 to_char 函数的情况下使用 order_date 吗? 最好使用TO_CHAR(order_date,'DY', 'NLS_DATE_LANGUAGE=AMERICAN'),以便独立于 NLS 设置。【参考方案2】:

我认为你可以使用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() 方法进行了全表扫描,而在这里使用此方法我对日期列的索引进行了全扫描。

【讨论】:

以上是关于周六和周日的行总和的主要内容,如果未能解决你的问题,请参考以下文章

计算日期之间的天数,不计算周六和周日[重复]

当使用 Bootstrap Datepicker 选择两个日期时,显示总天数(不包括周六和周日)

获取2周前的周日和周六的日期

Project中设置周六周日为工作日

Oracle,获取2个日期间有多少个周六和周日

java判断是不是是周六周日