среда, 18 сентября 2013 г.

Странное поведение mysql datediff

Понадобилось выбрать все записи, дата создания которых больше 30 дней.
Дата создания хранится в поле типа datetime

Для начала написал

DATEDIFF(NOW() , creation_date) > 30

Выборка забрала не все записи, которые были нужны. Нехитрым тестами определил, какие записи выпадают и обнаружил что при вычитании из текущей даты значения по умолчанию (0000-00-00 00:00:00) возвращается null.

Решение очевидно.

(DATEDIFF(NOW() , creation_date) > 30) OR (ISNULL(DATEDIFF(NOW() , creation_date)))

Надо будет разобраться, почему так происходит. Возможно идет какое то преобразование к timestamp

Комментариев нет:

Отправить комментарий