2016-06-23 32 views
0

我想排除2016年的週末,但我需要2015年的週末進行計算。 我也用這個表達我的查詢:我如何排除2016年的週末

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

但這週末排除了每年。我如何才能排除2016年的星期六和星期天?

我使用SSRS,我一直在考慮在過濾器選項中排除2016年的週末,但這需要很多時間,也許可以在查詢中完成。

+0

您正在使用哪些DBMS? –

+0

我使用SSMS 11.0 –

+0

這不是一個DBMS,它是一個SQL客戶端工具。但作爲唯一可連接的DBMS是SQL Server,假設您正在使用SQL Server是安全的 –

回答

0

試試這個:

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

想必你的意思是你想限制你的結果通過2016年不包括週末設置?

該代碼會爲你做的:

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

(可以使用一年或DATEPART)

但你必須先了解一週中的一天相當於1 看看在SET DATEFIRST命令。

+0

謝謝,但是如果我使用這個表達式,那麼會出現一個失敗:'Timeout'。 –

+0

有多少行正在選擇? – BIDeveloper

+0

我在SSRS中使用了一個圖表:'IntervalDateWeek> = getdate() - 350'但是如果我短期使用它,報表也會顯示一個錯誤。 –

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

+0

我看不出如何讓事情變得更簡單。你在做與其他兩個答案相同的where子句(基本上),但是你已經介紹了更多表的複雜性(因此也是性能命中)。我錯過了什麼嗎? – BIDeveloper

+1

@BIDeveloper:a)基於日曆表的WHERE子句更具可讀性,即使是財務審計人員也可以看到它顯然是正確的。 b)由於列的索引,日曆表上的連接通常更快 - 在我的系統上快兩倍。 –

+0

所以我沒有錯過任何東西:-) – BIDeveloper