Согласно этой статье документации , 0000-00-00
является "фиктивной датой", которую можно использовать вместо NULL, что означает, что 0000-00-00
само по себе не NULL.
Учитывая, что 0000-00-00
не может быть больше любой другой даты, вы должны использовать либо условие с OR
:
SELECT * FROM table WHERE column_date > NOW() OR column_date = '0000-00-00'
, либо объединение:
SELECT * FROM table WHERE column_date > NOW()
UNION ALL
SELECT * FROM table WHERE column_date = '0000-00-00'
В качестве альтернативы вы могли бы использовать такую конструкцию:
SELECT *
FROM table
WHERE IFNULL(NULLIF(column_name, '0000-00-00'), '9999-12-31') > NOW()
Но это, вероятно, запретило бы запросу использовать индекс в column_date
, если таковой имеется.