MySQL DATE_ADD (), когда DATE равен нулю - PullRequest
1 голос
/ 06 ноября 2011

У меня есть значение DATETIME "some_date", которое может быть нулевым в моей базе данных.Когда я пытаюсь выполнить следующий запрос, он ничего не возвращает для тех строк с нулевой датой:

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

Могу ли я отредактировать этот запрос так, чтобы DATE_ADD () выдавал DATE, даже если some_date равен нулю?

Ответы [ 2 ]

6 голосов
/ 06 ноября 2011

Вы можете использовать COALESCE для преобразования значений NULL во что-то другое, например:

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

COALESCE возвращает свой первый ненулевой аргумент:

COALESCE(value, ...)
Возвращает первое ненулевое значение в списке или 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()
3 голосов
/ 06 ноября 2011

Возможно, немного понятнее использовать следующий запрос:

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