0

我被困在必须排除周末票并需要计算其余票(仅工作日)的地步。

让我们假设:

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
4

3 回答 3

3

不要打扰日期优先。它可能会导致问题

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

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

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

它的作用是这样的:

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

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

于 2012-04-06T13:24:19.407 回答
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 */
于 2012-04-05T21:49:01.760 回答
1
Select * From Tickets Where DatePart(dw,dates) between 2 And 6

假设周日是第一天

你可以把它弄乱SET DATEFIRST

于 2012-04-05T21:49:09.723 回答