MySQL - 每月查找同一天

时间:2011-07-13 04:44:54

标签: mysql datetime

我创建了一个系统,该系统将根据用户注册时间每月计算数据。

我将运行每日一次的cron工作来抓住所有需要计算信息的用户,我想抓住每一天的所有用户。

如果用户都注册了2011-01-01

之类的内容

简单查询会发现(如果昨天是期末):

SELECT `user_id` 
FROM `table` 
WHERE DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )

如果他们注册2011-03-31

,会变得更加复杂

我可以使用哪些查询来确保在2011-04-30上找到它们?

我猜是

SELECT `user_id`
FROM `table`
WHERE 
    DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
    OR DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) < DAY( `date_created` )
        AND LAST_DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) = DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )

这似乎不是很有效,我也不知道它是否会起作用(尽管我怀疑它确实如此)。

有没有尝试过真正的方法?或者更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您需要做的就是检查它是否是本月的第一天,是否进行>=比较,否则进行=比较。

WHERE IF(DAY(CURRENT_DATE()) = 1,
    DAY( `date_created` ) >= DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )),
    DAY( `date_created` ) = DAY(DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ))
)

因此,在3月1日,它将更新在28日或之后注册的用户(非闰年)。