如何仅在2016年排除周末

时间:2016-06-23 10:10:30

标签: sql sql-server tsql

我想排除2016年的周末,但我需要在2015年的周末进行计算。 我在我的查询中使用了这个表达式:

((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0,1)

但这个周末不包括在内。我怎样才能排除2016年的周六,周日?

我使用SSRS,我一直在考虑在过滤器选项中排除2016年的周末,但这需要花费很多时间,也许可以在查询中进行。

3 个答案:

答案 0 :(得分:0)

试试这个:

(DATEPART(year, IntervalDate) <> 2016) OR ((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0,1)

答案 1 :(得分:0)

大概你是说你想通过排除2016年的周末来限制你的结果集?

此代码将为您执行此操作:

WHERE YEAR(IntervalDate) <> 2016 OR (YEAR(IntervalDate) = 2016 AND DATEPART(dw,IntervalDate) > 1 AND DATEPART(dw,IntervalDate) < 7)

(你可以使用YEAR或DATEPART)

但是你必须先了解一周中哪一天对应于1。 看一下SET DATEFIRST命令。

答案 2 :(得分:0)

日历表极大地简化了像这样的查询。一个很大的优点是正确的查询显然正确。

select *
from calendar
where (year_of_date = 2015)
   or (year_of_date = 2016 and day_of_week not in ('Sat', 'Sun'))
order by cal_date;

I've posted DDL for a calendar table in PostgreSQL