DATE_FORMAT два раза в разделе, где пункт не работает - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу проверить, старше ли набор данных, чем текущий месяц, на -1 день (поэтому, если это первое ноября, он все же должен быть старше октября).Это мой SQL:

SELECT *
FROM XY
WHERE DATE_FORMAT(calendar_day, '%Y-%m') <> DATE_FORMAT((CURRENT_DATE()-1, '%Y-%m');

Но он не работает из-за второго DATE_FORMAT.Если я удаляю его, он работает, но тогда он также сравнивает дни, а не месяцы.Как мне это решить?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я хочу проверить, является ли набор данных старше текущего месяца -1

Не использовать DATE_FORMAT() в столбце для этого типа запроса.Сохраните все функции даты на «текущую дату».Функции на столбцах препятствуют оптимизации.

Я думаю, что это делает то, что вы хотите:

SELECT *
FROM XY
WHERE calendar_day <= LAST_DAY(CURRENT_DATE() - interval 1 day - interval 1 month);
0 голосов
/ 27 сентября 2018

Попробуйте использовать функцию года и месяца:

SELECT *
FROM XY
WHERE (year(calendar_day) <> year(CURRENT_DATE()-1)) 
and (month(calendar_day)<>month(CURRENT_DATE()-1))
...