Дата 3 месяца интервала между столбцами mysql

#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 столбец, все еще может быть использован.