我想检查数据集是否早于当前月份-1天(因此,如果它是11月1日,则还应该早于10月)。这是我的SQL:
SELECT *
FROM XY
WHERE DATE_FORMAT(calendar_day, '%Y-%m') <> DATE_FORMAT((CURRENT_DATE()-1, '%Y-%m');
但是由于第二个DATE_FORMAT,它不起作用。如果删除它,它会起作用,但是它还会比较日期而不是月份。我该如何解决?
答案 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))