2014-02-20 167 views
3

我需要在where條款中添加case聲明。我希望它根據TermDate的值運行以下任一語句。Add Case Statement in Where條款

Select * 
from myTable 
where id = 12345 
    AND TermDate CASE 
    WHEN NULL THEN 
     AND getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate) 
    ELSE 
    AND GETDATE < TermDate 
    END 

回答

6

爲什麼不只是使用OR條件?

SELECT * 
FROM myTable 
WHEN id = 12345 
AND ((TermDate IS NULL AND 
     getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)) OR 
     GETDATE() < TermDate) 
+0

可能是我們還需要添加 「TermDate IS NOT NULL和」 之後 「OR」 操作 –

+1

@codechimp'值 Mureinik

2

因爲我們所有張貼3分確切的答案,顯然是太多了,在這裏,使用您的case when建設一個版本。

使用本:

select * 
from myTable 
where id = 12345 
AND case 
     when TermDate IS NULL 
      AND getdate() BETWEEN StartDate AND DATEADD(dd, 30, StartDate) 
     then 1 
     when GETDATE < TermDate 
     then 1 
     else 0 
     end 
     = 1 
+1

哇...開眼界的謝謝 –

2

你可以做到這一點使用ANDsORs。嘗試以下查詢。

Select * 
From myTable 
where id = 12345 
AND ((TermDate IS NULL 
      AND GETDATE() BETWEEN StartDate AND DATEADD(dd, 30, StartDate)) 
    OR (GETDATE() < TermDate))