我只需要从当前系统日期获取一个月。我尝试过以下操作
SELECT COUNT(*) FROM `audit` JOIN `user` ON `user`.id=`audit`.`auditor_id` WHERE `audit`.`auditor_id`=1 AND MONTH(`audit`.`created_date`)=NOW()
但是,此查询没有任何计数。我可以使用NOW()进行这样的查询吗?
答案 0 :(得分:2)
使用month()
函数
SELECT COUNT(*)
FROM `audit` JOIN `user` ON `user`.id=`audit`.`auditor_id`
WHERE `audit`.`auditor_id`=1 AND MONTH(`audit`.`created_date`)=month(NOW())
答案 1 :(得分:1)
我建议编写这样的逻辑:
SELECT COUNT(*)
FROM `audit` a JOIN
`user` u
ON u.id = a.auditor_id
WHERE a.auditor_id = 1 AND
a.created_date >= curdate() - interval (1 - day(curdate()) day AND
a.created_date < (curdate() - interval (1 - day(curdate()) day) + interval 1 month;
与使用MONTH(a.created_date)
相比,这有两个优点。首先,它包含年份,因此仅考虑当前月份。
也许更重要的是,这是“索引安全的”。它可以利用audit(auditor_id, created_date)
上的索引。要优化索引使用率,您要避免在列上使用函数。