這可能嗎? Can one選擇日期哪裏IN(NULL,> = SYSDATE)
SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)
?也許我的格式不正確,或者錯過了打勾?
我想select
是來自日期字段的值是NULL
或大於今天的日期(>=SYSDATE
)。任何幫助,將不勝感激。
SQL10克
這可能嗎? Can one選擇日期哪裏IN(NULL,> = SYSDATE)
SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)
?也許我的格式不正確,或者錯過了打勾?
我想select
是來自日期字段的值是NULL
或大於今天的日期(>=SYSDATE
)。任何幫助,將不勝感激。
SQL10克
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL OR DATES >= SYSDATE
每次我嘗試了10分鐘,使用它會導致大量的運行時間or子句,有時。這就是爲什麼我想盡可能使用IN子句。這似乎更好地工作,這些大型查詢(我選擇向上與樞軸45個不同的列等) – user1983682
最後我用這樣的邏輯,但關閉了'或'這樣: 'SELECT * FROM DATES_TBL WHERE(日期IS NULL或日期> = SYSDATE)' 這減少了運行時間並收集我的結果。感謝您提出我的答案的建議。 – user1983682
天啊....添加括號無關,與你的查詢的性能... –
NULL值是一個特殊值,所以你必須編寫你的聲明像:
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL
OR DATES >= SYSDATE
這絕對不是一個有效語法: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
列已編入索引。
假設這是Oracle,試試這個:
SELECT * FROM DATES_TBL WHERE(DATES_TBL.DATES爲空或DATES_TBL.DATES> = SYSDATE)
括號,使其工作。
你的FROM子句在哪裏? – sgeddes
我只是概括並忘記了它。我將編輯。 – user1983682