2013-06-03 81 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());