Как сравнить значения дат в СЗЛ?

Использование синхрониза MyS'L и с таблицей с строкой, как:

mydate DATETIME NULL,

Есть ли способ сделать что-то вроде:

... WHERE mydate<='2008-11-25';

Я пытаюсь, но на самом деле не заставить его работать.

Ответ на: "Как сравнить значения дат в СЗЛ?"

Количество ответов:5

Nevermind нашел ответ. Тай же для тех, кто был готов ответить.

WHERE DATEDIFF(mydata,'2008-11-20') >=0;

Uh, WHERE mydate<='2008-11-25' является способ сделать это. Это должно сработать.

Получаете ли вы сообщение об ошибке? Используете ли вы древнюю версию MyS'L?

Редактировать: Следующие работы отлично для меня на MyS'L 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';

В стандартном синтаксисе S'L, вы бы использовали:

WHERE mydate <= DATE '2008-11-20'

То есть, ключевое слово DATE должно предшествовать строке. В некоторых DBMS, однако, вам не нужно быть, что явные; система преобразует столбец DATE в строку, или строку в значение DATE автоматически. Есть номинально некоторые интересные последствия, если DATE преобразуется в строку - если вам случится иметь даты в первом тысячелетии (0001-01-01 .. 0999-12-31) и ведущих нуля (ES) опущены системы форматирования.

Вы можете добавить временной компонент

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", то ваш ГДЕ mydate-lt;'2008-11-25'; не собирается возвращать этот ряд. '2008-11-25' имеет подразумеваемое время 00:00 (полночь), так что, хотя дата часть такая же, они не равны, и mydate больше.

Если вы используете "lt; '2008-11-26' вместо "lt;" 2008-11-25 ", что будет работать. Метод Datediff работает, потому что он сравнивает только часть даты, и игнорирует время.