您可能已定义expiry_date
为日期时间值,这意味着您的比较不正确。例如你需要使用
SELECT ... WHERE date(expiry_date) = date(now() + interval 7 day)
取而代之的是(注意 +7 天在date()
操作中的包装。
例如
给定一个带有日期和日期时间字段的表:
+------------+---------------------+
| d | dt |
+------------+---------------------+
| 2013-06-28 | 2013-06-28 08:23:03 |
+------------+---------------------+
注意比较是如何产生的:
mysql> select d=now(), d=date(now()), dt=now(), dt=date(now()), now() from x;
+---------+---------------+----------+----------------+---------------------+
| d=now() | d=date(now()) | dt=now() | dt=date(now()) | now() |
+---------+---------------+----------+----------------+---------------------+
| 0 | 1 | 0 | 0 | 2013-06-28 08:26:20 |
+---------+---------------+----------+----------------+---------------------+
1 row in set (0.00 sec)
date vs datetime = false
date vs date = true
datetime vs datetime = false (hh:mm:ss 不匹配,所以不相等)
datetime vs date = false (日期扩展为 yyyy-mm-hh 00:00: 00 和 hh:mm:ss 不匹配