2015-02-10 77 views
0

我需要從工作臺上得到的所有值不爲空:條件。如果在SQL Server中

  • 如果datetime列「開始」不爲空到小於或等於現在。如果它爲空,我需要忽略開始驗證。
  • 如果日期時間列'停止'不爲空並且大於或等於現在。如果是空我需要忽略停止驗證

所以我創造了這個請求

DECLARE @currDate DATETIME; 
SET @currDate = GETDATE(); 

SELECT * 
FROM table 
WHERE 
    -- here I have some other conditions 
    AND @currDate >= (CASE WHEN table.validityStart IS NOT NULL THEN table.validityStart ELSE @currDate END) 
    AND @currDate <= (CASE WHEN table.validityStop IS NOT NULL THEN table.validityStop ELSE @currDate END) 

所以,如果停止或開始爲null我比較當前日期時間與自身。我不認爲這是創建此請求的最佳方式。

那麼,有沒有可能避免「其中」部分驗證,如果值爲空,但不是它本身比較

回答

4

你可以寫在下面的方式條件:

AND (table.validityStart IS NULL OR table.validityStart<[email protected]) 
AND (table.validityStop IS NULL OR table.validityStop >[email protected]) 
0

隱而不宣」 t SQL Server支持合併? (即選取第一個非空值)。

AND @currDate >= coalesce(table.validityStart, @currDate) 
AND @currDate <= coalesce(table.validityStop, @currDate) 
+0

是的,這是可能的解決方案,但這裏不是SARG。 – 2015-02-10 10:14:13

+0

st mnmn的回答比較好。 (Upvoted!) – jarlh 2015-02-10 10:16:05