Как я могу запросить между двумя датами с помощью поля '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'

Пример SQLFiddle

редактировать

Вы также можете сделать это:

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

Зафиксируйте стол!

  1. Добавьте новый столбец соответствующего DATE тип данных:

    ALTER TABLE `table` ADD new_date_field DATE AFTER date_field;
    
  2. Используйте MySQL STR_TO_DATE() функция для заполнения этого нового столбца датами, содержащимися в старом столбце:

    UPDATE `table` SET new_date_field = STR_TO_DATE(date_field, '%d-%m-%Y');
    
  3. Удалите старый столбец (и, при желании, переименуйте новый на его место):

    ALTER TABLE `table` DROP date_field, CHANGE new_date_field date_field DATE;
    
  4. Измените ваше приложение, чтобы использовать этот новый столбец.

Работая с датами в различных форматах, я нашел, что лучше либо отформатировать обратно в формат базы данных, либо использовать собственный согласованный формат для обработки. Один из вариантов, который мы используем, - это наш собственный формат даты и времени, который представляет собой просто ГГГГММДДччммсс, который всегда будет корректно сортироваться по високосным годам и т. Д. И упрощает анализ данных. Затем мы можем отобразить формат в желаемом представлении пользователя, без каких-либо проблем.

Хотя это не является прямым ответом на ваш вопрос, я обнаружил, что это экономит много времени и усилий при обработке форматов даты и времени из разных стран. Мы также стараемся сэкономить время в Зулу.

Другие вопросы по тегам