我有一个自动检查器,可以检查将在未来 7 天内过期的域名,并向客户发送电子邮件。
我使用这个 SQL 查询:
SELECT * from domain_names where status = '' or status = 'valid' and expiry_date = DATE(NOW() + INTERVAL 7 DAY)
但它工作不正常。我需要它来检查 expiry_date 恰好是未来 7 天的行。另外,如果检查器停止运行并且在未运行的时间内错过了一些行,那么它也需要执行这些行
你可能已经定义了expiry_date
作为日期时间值,这意味着您的比较不正确。例如你需要使用
SELECT ... WHERE date(expiry_date) = date(now() + interval 7 day)
相反(请注意将+7天包裹在date()
手术。
e.g.
给定一个包含日期和日期时间字段的表:
+------------+---------------------+
| 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)
日期与日期日期时间 = false
日期 vs 日期 = true
日期时间与时间datetime = false(hh:mm:ss 不匹配,因此不相等)
日期时间与时间date = false(日期扩展为 yyyy-mm-hh 00:00:00 且 hh:mm:ss 不匹配
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)