#mysql
#mysql
Вопрос:
У меня есть таблица, в которой есть поля fromdate и todate. Я пытался получить данные за определенную дату.
Ниже приведен запрос, который я безуспешно пытался,
SELECT *
FROM install
WHERE customer != ''
AND billtype = 'QUARTERLY'
AND (STR_TO_DATE (fromdate, ' %m-%Y') INTERVAL 3 MONTH=STR_TO_DATE('01-01-2018', ' %m-%Y'))
Например
если пользователь выберет январь месяц 2019, должна появиться любая строка с датой начала 3 месяца. Есть предложения
Ответ №1:
Попробуйте использовать неравенства дат, которые позволяют избежать вызовов STR_TO_DATE
:
SELECT *
FROM install
WHERE
customer <> '' AND
billtype = 'QUARTERLY' AND
DATE_ADD(fromdate, INTERVAL 3 MONTH) BETWEEN '2018-01-01' AND '2018-01-31';
К вашему сведению, ваш текущий синтаксис отключен, поэтому он не будет работать так, как вы ожидали.
Но на самом деле, лучшим способом выразить вашу логику было бы вычесть 3 месяца из января 2018:
SELECT *
FROM install
WHERE
customer <> '' AND
billtype = 'QUARTERLY' AND
fromdate BETWEEN '2017-10-01' AND '2017-10-31';
Эта версия запроса также доступна для саргирования, что означает, что индекс, включающий fromdate
столбец, все еще может быть использован.