2013-06-03 80 views
1

比方說,我有一個表ID,Date1Date2其中Date2可以是NULL。我現在想要一個SQL語句,如果它是NULL,它將忽略Date2WHERE子句條件檢查NULL

所以,我需要類似的東西:

SELECT * 
FROM 
    [myTable] 
WHERE 
    ID = @someId 
    AND Date1 <= GETDATE() 
    AND Date2 >= GETDATE() IF Date2 IS NOT NULL 

所以我要檢查,如果日期2不NULL,然後將其與當前的日期進行比較。如果它是NULL那麼我只是想忽略它。
希望我的要求清晰易懂。

乾杯
西蒙

+0

'Date2> = GETDATE()'這個條件**已經**暗示它不是'null' – zerkms

+0

@zerkms這是不正確的。在SQL中與'NULL'的比較定義不明確。 – kirelagin

+0

@kirelagin:「所以我想檢查Date2是否不爲NULL,然後將它與當前日期進行比較」--- Date2> = GETDATE()對於Date2' IS NULL是永遠不會是真的,所以另一個不需要檢查 – zerkms

回答

3
AND Date1 <= GETDATE() 
AND (Date2 IS NULL OR Date2 >= GETDATE()) 

AND Date1 <= GETDATE() 
AND COALESCE(Date2, GETDATE()) >= GETDATE()-- which means : if Date2 IS NULL say Date2 = GETDATE() 
2

AND (Date2 >= GETDATE() OR Date2 IS NULL)

1

你可以這樣做:

ISNULL(Date2, GETDATE()) >= GETDATE() 
0
SELECT * 
FROM 
    [myTable] 
WHERE 
    ID = @someId 
    AND Date1 <= GETDATE() 
    AND Date2 NOT IS NULL 
    AND Date2 >= GETDATE(); 
1

給這個SQL一試。

SELECT * 
    FROM yourtable 
    WHERE ID = @someId 
    AND Date1 <= GETDATE() 
    AND (Date2 IS NULL 
    AND Date2 >= GETDATE());