Использование синтаксиса MySQL и наличие таблицы со строкой типа:
mydate DATETIME NULL,
Есть ли способ сделать что-то вроде:
... WHERE mydate<='2008-11-25';
Я пытаюсь, но на самом деле не могу заставить его работать.
Использование синтаксиса MySQL и наличие таблицы со строкой типа:
mydate DATETIME NULL,
Есть ли способ сделать что-то вроде:
... WHERE mydate<='2008-11-25';
Я пытаюсь, но на самом деле не могу заставить его работать.
Nevermind нашел ответ. Тай же для всех, кто хотел ответить.
WHERE DATEDIFF(mydata,'2008-11-20') >=0;
Uh, 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';
В стандартном синтаксисе SQL вы должны использовать:
WHERE mydate <= DATE '2008-11-20'
То есть ключевое слово DATE должно предшествовать строке. Однако в некоторых СУБД вам не обязательно быть такими явными; система автоматически преобразует столбец DATE в строку или строку в значение DATE. Есть номинально некоторые интересные последствия, если DATE преобразуется в строку - если у вас есть даты в первом тысячелетии (0001-01-01.. 0999-12-31), а начальные ноль (ов) опущены система форматирования.
Вы можете добавить компонент времени
WHERE mydate<='2008-11-25 23:59:59'
но это может завершиться неудачей при дате переключения DST, если mydate имеет значение "2008-11-25 24:59:59", поэтому, вероятно, лучше всего захватить все до следующей даты:
WHERE mydate < '2008-11-26 00:00:00'
Возможно, проблема заключается в том, что вы имеете дело с данными DATETIME, а не только с датами. Если строка имеет mydate, которая является "2008-11-25 09:30 AM", то ваш WHERE mydate <= '2008-11-25'; не собирается возвращать эту строку. "2008-11-25" имеет подразумеваемое время 00:00 (полночь), поэтому, хотя часть даты одинакова, они не равны, а mydate больше.
Если вы используете < '2008-11-26' вместо <= '2008-11-25', это сработает. Метод Datediff работает, потому что он сравнивает только часть даты и игнорирует время.