

Nevermind нашел ответ. То же самое для всех, кто был готов ответить.
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
Эээ, WHERE mydate<='2008-11-25'является способ сделать это. Это должно сработать.
Вы получаете сообщение об ошибке? Вы используете старую версию MySQL?
Обновлено: следующее отлично работает для меня в MySQL 5.x
create temporary table foo(d datetime);
insert into foo(d) VALUES ('2000-01-01');
insert into foo(d) VALUES ('2001-01-01');
select * from foo where d <= '2000-06-01';
На моей СУБД PostgreSQL действительно работает нормально. Может быть слабое место MySQL?
Эээ, это тоже работает с MySQL. :) Я просто попробовал убедиться, что не чокнутый. Какую версию MySQL вы используете fmfs? Вы получаете сообщение об ошибке?
В стандартном синтаксисе SQL вы должны использовать:
WHERE mydate <= DATE '2008-11-20'
То есть ключевое слово DATE должно предшествовать строке. В некоторых СУБД, однако, не нужно быть таким явным; система автоматически преобразует столбец DATE в строку или строку в значение DATE. Формально есть некоторые интересные последствия, если ДАТА преобразована в строку - если у вас есть даты в первом тысячелетии (0001-01-01 .. 0999-12-31), и начальные нули опущены система форматирования.
Обратите внимание: если все даты указаны в формате ISO 8601, как показано, сравнения строк будут работать (это функция ISO 8601).
Если начальные нули включены, да. Теоретически, если у вас есть даты до 01.01.1000, СУБД может опустить начальные нули. Не уверен, что это очень вероятно, но известны и более забавные вещи. Oracle поддерживает даты BCE (BC); они не могут быть надежно сопоставлены как строки.
Вы можете добавить компонент времени
WHERE mydate<='2008-11-25 23:59:59'
но это может не сработать в даты перехода на летнее время, если mydate - '2008-11-25 24:59:59', поэтому, вероятно, безопаснее всего захватить все до следующей даты:
WHERE mydate < '2008-11-26 00:00:00'
Ваша проблема может заключаться в том, что вы имеете дело с данными DATETIME, а не только с датами. Если у строки есть mydate «2008-11-25 09:30 AM», то ваш ГДЕ mydate <= '2008-11-25'; не вернет эту строку. «2008-11-25» подразумевает время 00:00 (полночь), поэтому, хотя часть даты одинакова, они не равны, а mydate больше.
Если вы используете <'2008-11-26' вместо <= '2008-11-25', это сработает. Метод Datediff работает, потому что он сравнивает только часть даты и игнорирует время.
Это выглядит медленно: вызов функции и неявное преобразование для каждой строки в таблице. Должен быть способ более прямого сравнения дат.