如何在一个月内排除周末数据?

时间:2012-04-05 21:38:48

标签: sql tsql

我陷入困境,我不得不排除周末门票,需要计算其余门票(只是工作日)。

我们假设:

tickets               dates
-----------           ----------
123                   04/05/2012
231                   04/06/2012
111                   04/07/2012
112                   04/08/2012 
113                   04/09/2012

因此,在上表中我们有5天的数据,包括工作日和周末。

我只需要工作日数据而不是周末在我的决赛桌上这样:

tickets               dates 
-----------           ----------
123                   04/05/2012
231                   04/06/2012
113                   04/09/2012

3 个答案:

答案 0 :(得分:3)

不要为datefirst而烦恼。它可能会导致问题

select * from @t 
where datediff(d, 0, dates)%7 < 5

编辑: Datefirst与数据库不同。所以你需要在使用'DatePart(dw,dates)'之前设置datefirst 一周中的。这意味着每次运行脚本时都应该调用datefirst。如果你决定把它放在一个函数中,你就搞砸了,因为你不能在函数中使用它。因此,每次调用该函数时,您都依赖于人们记住日期的第一部分。

我的解决方案不依赖于数据库的个别设置。

它的作用是:

计算代表1900-01-01(星期一)和日期的0之间的天数。

模数7是0(星期一)和6(星期日)之间的天数,因此工作日小于5。

答案 1 :(得分:1)

您通常使用set datefirstdatepart函数的组合来过滤查询中的工作日或周末。你没有给表格结构多少,所以请仅使用以下内容作为粗略指南。

一个例子是这样的:

set datefirst 1;  /* treat monday as first day of week */

select tickets from mytable 
    where datepart(dw,mydate) < 6;  /* select days 1 - 5 only */

答案 2 :(得分:1)

Select * From Tickets Where DatePart(dw,dates) between 2 And 6

假设星期天是第一天

你可以使用SET DATEFIRST

搞乱这一点