这个 mysql 脚本到底是什么意思 time BETWEEN ?
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')
这读起来好一点,但它会扼杀优化。我会坚持你已经有的表达。