提问者:小点点

选择d-mY格式的日期到下个月1日,再加上Mysql格式的1天之间的记录


我需要从一个表'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。 查询是否正确和有效,是否在所有月份都能正常工作。

如有改进,请专家提出建议。


共1个答案

匿名用户

应将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上的演示