2011-11-06 122 views
1

我有一個DATETIME值「some_date」,可以在我的數據庫中爲null。當我嘗試下面的查詢返回沒有爲這些行與日期爲空:MySQL DATE_ADD()DATE爲空時

SELECT * 
FROM tabel 
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW() 

我可以編輯此查詢,以便DATE_ADD()會產生日期,即使some_date爲空?

回答

5

你可以使用COALESCE到NULL日期別的轉換,例如:

select * 
from table 
where date_add(coalesce(some_date, now()), interval some_seconds second) < now() 

COALESCE返回它的第一個非NULL參數:

COALESCE(value, ...)
返回第一個非列表中爲NULL值,如果沒有非NULL值,則爲NULL。

所以你只需要決定你想用哪個日期來代替NULL some_date


如果您更換一個NULL some_date將是遠遠不夠成爲過去,測試將永遠傳遞,那麼你可以使用:

where some_date is null 
    or date_add(some_date, interval some_seconds second) < now() 

,如果它總是會失敗,那麼:

where some_date is not null 
    and date_add(some_date, interval some_seconds second) < now() 
+0

非常感謝您的先生:) – BigJ

+0

它會變慢,因爲沒有索引可以用於此查詢... – glglgl

+0

僅供參考,我正在使用COALESCE(some_date,「2000-01-01 00:00:00 「) – BigJ

2

這可能是一個更清晰一點使用下面的查詢:

SELECT * 
FROM tabel 
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW() 
+0

它測試了它,它工作。但是爲什麼?在WHERE條件下你說什麼? – BigJ

+0

The如果some_date沒有被設置(null)或者它被設置,那麼WHERE子句是真的,當它加上一些秒數小於當前時間時。 –