MySQL WildCard запрос проблемы
Вопрос
WHERE `time` BETWEEN 'Jan 1 %' AND 'Jan 8 %' AND ...
Полученные результаты
Jan 1 00:33:23
Jan 10 08:52:05
Как бы я избегал результатов 10 января?
Я пробовал несколько разных сочетаний с%, <= и т. Д.
Любые идеи?
Спасибо
Решение
WHERE Time >= '1/1/2011' AND Time < '1/9/2011'
Или, если вы хотите результаты из любого года:
WHERE DATEPART( month, Time ) = 1 AND DATEPART( day, Time ) < 9
Другие советы
В настоящее время с этим запросом вы запутаете поисковую систему, потому что «между» предназначен для использования с числами или датами, когда вы используете его с строками.
Есть 2 решения вашей проблемы:
1) Преобразовать свое поле «Время» в «Дата» и хранить даты как «01-01-2010 00:00» (это самое здоровое решение, поскольку вы сделаете БД знаумельника, это поле даты) 2) :
WHERE `time` >= 'Jan 1' AND `time` < 'Jan 2'
Второе решение может дать странные результаты, поскольку он сравнивает 2 строки, а не 2 дат.
Я не могу попробовать это для вас здесь, но почему бы вам не попробовать с методом str_to_date? Вы можете изменить свое время времени на реальную дату, а затем не нужно делать эту строку сравнить:
WHERE STR_TO_DATE(`time`,'%d,%m,%Y') BETWEEN
'2010-01-01'
AND
'2010-01-09'
также см http://dev.mysql.com/doc/refman/5.5/en/date-andtime-functions.html#function_str-to-date.date.