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

时间:2013-08-15 14:35:08

标签: php mysql

这个mysql脚本到底意味着什么时间BETWEEN?

     ADDDATE(CURDATE(), -(DAY(CURDATE())-1)) AND CONCAT(LAST_DAY(CURDATE()),' 23:59:59')

1 个答案:

答案 0 :(得分:0)

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')

这看起来好一点,但它会杀死优化。我会坚持你已有的表达方式。