2016-12-06 98 views
0

我有一個人的表,inactive-flag(位)表示有效/無效和fromdate,todateSQL Server:WHERE子句中排除選擇中的數據

  • a)不活動= 1表示某人是普通的「不活躍」。 如果在fromdate和todate字段中存在日期,則意味着他在此日期期間通常不處於活動狀態EXCEPT

  • b)非活動= 0表示某人是一般「活躍」。 如果在fromdatetodate字段中存在日期,則表示在此日期期間通常他是活動的EXCEPT

  • c)Last Option是僅有Inactive = 0,沒有任何日期異常(fromdate和todate字段爲NULL)的人。

我想過濾所有人a)和c),除了b)。

我嘗試了很多,但無法解決問題。

我找到了a)和c)的解決方案,但沒有找到b)的解決方案。 我試過二):

WHERE inaktiv=0 AND (Not (fromdate >=convert(date,getdate()) AND todate <=convert(date,getdate()))) 
+0

你可以使用「聯合」與多選擇陳述 –

+0

爲什麼你想b)的情況下,如果你只想a)和c)的情況? –

+0

你忘了'或Inactive = 1'。另外,將比較日期的否定與日期混淆可能是絕對清楚的(fromdate <@date和todate> @date)' –

回答

0

要得到)和c)情況:

WHERE inaktiv=1 OR (inaktiv=0 AND fromdate IS NULL AND todate IS NULL) 
+0

fromdate和todate都有日期,所以todate不能爲NULL。我必須檢查兩個日期。我的問題是b)。 a)和c)得到解決。 – mak

0

我覺得我做了很多試驗後:

WHERE ((inaktiv=0 and (not (convert(date,getdate()) between aktivVon AND aktivBis)))) 
or ((inaktiv=0) and (aktivVon is null AND aktivBis is null)) 
or ((inaktiv=1 and (convert(date,getdate()) between aktivVon AND aktivBis))) 

最後一行b)。 請確認我的解決方案,我希望我沒有忘記任何東西。 邁克爾