adddate(curdate(), -(day(curdate())-1)) and concat(last_day(


adddate(curdate(), -(day(curdate())-1)) and concat(last_day(curdate()),' 23:59:59')

这个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-012013-08-31 23:59:59。如果将此范围应用于DATETIME值,则表示"2013年8月的任何时间"。

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

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

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