我有一個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爲空?
我有一個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爲空?
你可以使用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()
這可能是一個更清晰一點使用下面的查詢:
SELECT *
FROM tabel
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
它測試了它,它工作。但是爲什麼?在WHERE條件下你說什麼? – BigJ
The如果some_date沒有被設置(null)或者它被設置,那麼WHERE子句是真的,當它加上一些秒數小於當前時間時。 –
非常感謝您的先生:) – BigJ
它會變慢,因爲沒有索引可以用於此查詢... – glglgl
僅供參考,我正在使用COALESCE(some_date,「2000-01-01 00:00:00 「) – BigJ