我陷入困境,我不得不排除周末门票,需要计算其余门票(只是工作日)。
我们假设:
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
答案 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 datefirst和datepart函数的组合来过滤查询中的工作日或周末。你没有给表格结构多少,所以请仅使用以下内容作为粗略指南。
一个例子是这样的:
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