Php adddate(curdate(),-(day(curdate())-1))和concat(last_day(curdate()),';23:59:59';)

Php adddate(curdate(),-(day(curdate())-1))和concat(last_day(curdate()),';23:59:59';),php,mysql,Php,Mysql,这个mysql脚本到底意味着什么 ADDDATE(CURDATE(), -(DAY(CURDATE())-1)) AND CONCAT(LAST_DAY(CURDATE()),' 23:59:59') DAY(CURDATE())-1是当月的当前日期,减去1。对于今天(2013年8月15日),价值为14。从8月15日减去14天,即为8月1日。换句话说,ADDDATE(CURDATE(),-(DAY(CURDATE())-1))为您提供一个月的第一天 LAST_DAY(CURDATE(

这个mysql脚本到底意味着什么

     ADDDATE(CURDATE(), -(DAY(CURDATE())-1)) AND CONCAT(LAST_DAY(CURDATE()),' 23:59:59')
DAY(CURDATE())-1
是当月的当前日期,减去1。对于今天(2013年8月15日),价值为14。从8月15日减去14天,即为8月1日。换句话说,
ADDDATE(CURDATE(),-(DAY(CURDATE())-1))
为您提供一个月的第一天

LAST_DAY(CURDATE())
提供一个月的最后一天。如果您今天打电话,它将返回2013年8月31日。添加
23:59:59
,您就得到了该月最后一天的最后一秒

换句话说,如果在2013年8月15日调用,则值显示为
2013-08-01
2013-08-31 23:59:59
。如果将此范围应用于
DATETIME
值,则表示“2013年8月的任何事情”

这实际上是一种在一个月内检查日期/时间值的非常好的方法,因为它避免了在MySQL列上使用保存日期/时间的函数。如果列具有索引,则该索引(可能)将用于优化。我经常看到的一种方法是:

WHERE DATE_FORMAT(myDateTime, '%Y%m') = DATE_FORMAT(CURDATE(), '%Y%m')

这读起来稍微好一点,但它扼杀了优化。我会坚持你已经有的表达方式。

谢谢Ed Gibbs,这不是我的剧本,我只是想知道到底是怎么回事,他们把它全部标记为负数:(我认为你的问题足够合法,因为很明显这不是你的代码。否决票可能是因为没有显示任何研究成果,不幸的是,这也是合法的。如果你可以再做一次,我建议(a)说明这不是你的代码,以及(b)表明你已经检查了各种函数(
CURDATE
DATE\u ADD
DAY
)但不了解它们是如何协同工作的。