Как я могу запросить между двумя датами с помощью поля 'date' строка?
У меня есть таблица в базе данных MySQL с полем с именем "Date", проблема в том, что дата имеет формат DD-MM-YYYY, поэтому я не могу загрузить ее в MySQL как поле типа DATE. Вместо этого тип поля является строкой. Имея это в виду, как я могу написать запрос, который даст этот эффект -
SELECT * FROM `table`
WHERE (date_field BETWEEN '2010-01-30' AND '2010-09-29')
Помните, что поле date_field не типа DATE, а строка.
3 ответа
SELECT * FROM `table`
WHERE str_to_date(date_field, '%d-%m-%Y') BETWEEN '2010-01-30' AND '2010-09-29'
редактировать
Вы также можете сделать это:
SELECT * FROM `table`
WHERE cast(substring(date_field, 7, 4) as unsigned) * 10000 + cast(substring(date_field, 4, 2) as unsigned) * 100 + cast(substring(date_field', 1, 2) as unsigned)
BETWEEN 20100130 AND 20100929
Зафиксируйте стол!
Добавьте новый столбец соответствующего
DATE
тип данных:ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;
Используйте MySQL
STR_TO_DATE()
функция для заполнения этого нового столбца датами, содержащимися в старом столбце:UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, '%d-%m-%Y');
Удалите старый столбец (и, при желании, переименуйте новый на его место):
ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;
Измените ваше приложение, чтобы использовать этот новый столбец.
Работая с датами в различных форматах, я нашел, что лучше либо отформатировать обратно в формат базы данных, либо использовать собственный согласованный формат для обработки. Один из вариантов, который мы используем, - это наш собственный формат даты и времени, который представляет собой просто ГГГГММДДччммсс, который всегда будет корректно сортироваться по високосным годам и т. Д. И упрощает анализ данных. Затем мы можем отобразить формат в желаемом представлении пользователя, без каких-либо проблем.
Хотя это не является прямым ответом на ваш вопрос, я обнаружил, что это экономит много времени и усилий при обработке форматов даты и времени из разных стран. Мы также стараемся сэкономить время в Зулу.