-6

这个 mysql 脚本到底是什么意思 time BETWEEN ?

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

1 回答 1

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

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

于 2013-08-15T14:45:26.653 回答