我需要从一个表'followup'中选择在followup_date和下个月的第一个(包括下个月的第一个)之间的所有数据。 我的日期(从API获得)的格式为d-m-y。
例如,后续日期
是:18-07-2020。
我有以下疑问:
SELECT * from followup
WHERE DATEDIFF(STR_TO_DATE(`followup_date`,'%d-%m-%Y'), DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH,'%Y-%m-01'))- 1 < 0 ;
我得到-15天作为差异,并得到正确的记录,包括1RST。 查询是否正确和有效,是否在所有月份都能正常工作。
如有改进,请专家提出建议。
应将followup_date
列转换为date
类型。 然后,您可以通过删除followup_date
上的函数调用并简单地将其与目标日期进行比较来使查询具有sargable:
SELECT * from followup
WHERE `followup_date` <= DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH,'%Y-%m-01')
我怀疑在last_day(CURDATE())
中添加一天可能更有效:
SELECT * from followup
WHERE `followup_date` <= LAST_DAY(CURDATE()) + INTERVAL 1 DAY
SQLFiddle上的演示