База данных MySQL имеет годы записей начиная с 2015 года, но теперь все запросы, которым необходимо использовать дату записи, имеют проблему, пересекающую период с 2015 по 2016 год. При просмотре в базе данных дата была сохранена как Varchar. Теперь запускаем запрос
SELECT SUM( salesPrice ) AS total
FROM sales
WHERE salesDate >= '01-01-2016'
AND salesDate <= '02-07-2016'
«Итого» неверно. Он корректно запрашивает записи с salesDate от 01-01-2016 по 01-07-2016 (текущий день), но затем продолжает добавлять к итогу, используя элементы прошлого года.
Каков разумный способ преобразовать столбец и переформулировать запрос, чтобы остановить эту ошибку?
использование STR_TO_DATE
SELECT SUM( salesPrice ) AS total
FROM sales
WHERE STR_TO_DATE(salesDate,'%m-%d-%Y') >= '2016-01-01'
AND STR_TO_DATE(salesDate,'%m-%d-%Y') <= '2016-02-07'
Обратите внимание, что MySQL использует формат даты Y-m-d
по умолчанию, так что это то, что он ожидает.
С макушки головы, возможно попробуйте:
SELECT SUM( salesPrice ) AS total
FROM sales
WHERE FROM_UNIXTIME(salesDate) >= $time_from
AND FROM_UNIXTIME(salesDate) <= $time_to
где $ time_from а также $ time_to преобразуются в формат отметки времени с помощью PHP StrToTime () функция