DATE_FORMAT两次,其中“子句不起作用”

时间:2018-09-27 12:05:26

标签: mysql sql date-format

我想检查数据集是否早于当前月份-1天(因此,如果它是11月1日,则还应该早于10月)。这是我的SQL:

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

但是由于第二个DATE_FORMAT,它不起作用。如果删除它,它会起作用,但是它还会比较日期而不是月份。我该如何解决?

2 个答案:

答案 0 :(得分:5)

  

我要检查数据集是否早于当前月份-1

请勿在此类查询的列上使用DATE_FORMAT()。将所有日期功能保持在“当前日期”。列上的函数阻碍了优化。

我认为这可以满足您的要求

SELECT *
FROM XY
WHERE calendar_day <= LAST_DAY(CURRENT_DATE() - interval 1 day - interval 1 month);

答案 1 :(得分:0)

使用年份和月份功能尝试此操作:

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