2013-02-05 28 views
0

這可能嗎? Can one選擇日期哪裏IN(NULL,> = SYSDATE)

SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE) 

?也許我的格式不正確,或者錯過了打勾?

我想select是來自日期字段的值是NULL或大於今天的日期(>=SYSDATE)。任何幫助,將不勝感激。

SQL10克

+0

你的FROM子句在哪裏? – sgeddes

+0

我只是概括並忘記了它。我將編輯。 – user1983682

回答

3
SELECT * 
FROM DATES_TBL 
WHERE DATES IS NULL OR DATES >= SYSDATE 
+0

每次我嘗試了10分鐘,使用它會導致大量的運行時間or子句,有時。這就是爲什麼我想盡可能使用IN子句。這似乎更好地工作,這些大型查詢(我選擇向上與樞軸45個不同的列等) – user1983682

+0

最後我用這樣的邏輯,但關閉了'或'這樣: 'SELECT * FROM DATES_TBL WHERE(日期IS NULL或日期> = SYSDATE)' 這減少了運行時間並收集我的結果。感謝您提出我的答案的建議。 – user1983682

+1

天啊....添加括號無關,與你的查詢的性能... –

1

NULL值是一個特殊值,所以你必須編寫你的聲明像:

SELECT * 
FROM DATES_TBL 
WHERE DATES IS NULL 
OR  DATES >= SYSDATE 
1

這絕對不是一個有效語法:IN查詢需要的具體項目;另外,因爲在SQL中,null永遠不會等於任何東西,包括其他空值,因此將空值置於IN列表中並沒有任何意義。

你需要,而不是什麼是OR

SELECT * WHERE (DATES_TBL.DATES IS NULL) OR (DATES_TBL.DATES>=SYSDATE) 
--    ^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^ 
--    |        | 
--    |        +- This is how you compare for >= 
--    +------------- This is how you check for NULL 

每次我嘗試使用它會導致很多的運行時間or子句

在情況下,當OR引入結合非重疊的結果(這是在這種情況下真實的,因爲一列或者是null或大於SYSDATE更大,但不能同時),可以使用UNION ALL以有力加快搜索速度:

SELECT * WHERE DATES_TBL.DATES IS NULL 
UNION ALL 
SELECT * WHERE DATES_TBL.DATES >= SYSDATE 

您需要確保DATES_TBL.DATES列已編入索引。

0

假設這是Oracle,試試這個:

SELECT * FROM DATES_TBL WHERE(DATES_TBL.DATES爲空或DATES_TBL.DATES> = SYSDATE)

括號,使其工作。