如何检查,如果当前日期和其他日期超过1个月前?

时间:2012-01-11 17:16:59

标签: mysql datetime date intervals

我有以下查询:

$data = mysql_fetch_array(mysql_query("SELECT 
c.`id` AS cid,
p.`id` AS pid,p.`email`

FROM `coupons` AS c 
LEFT JOIN `coupons_partners` AS cp ON cp.`cid` = c.`id`
LEFT JOIN `partners` AS p ON p.`id` = cp.`pid`
LEFT JOIN `bills` AS b ON b.`pid` = p.`id`

WHERE 
( 
    CURRENT_DATE() BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
)
OR
( 
    CURRENT_DATE() NOT BETWEEN c.`expires` AND ADDDATE(c.`expires`, INTERVAL 1 MONTH) 
    AND 
    CURRENT_DATE() BETWEEN b.`date` AND ADDDATE(b.`date`, INTERVAL 1 MONTH)
)
ORDER BY b.`id` DESC"));    

有点凌乱。我想做一个cronjob并自动创建账单。它们只应在优惠券过期1个月后创建(c。expiresDATETIME)或最后一个帐单(b。date)是在1个月前创建的。 问题还在于,如果优惠券尚未开始,我不想创建任何账单。这是可能的,因为我创建的优惠券将在3个月内开始。所以我猜“解决之间”并不适合这里?

我正在努力弄清楚这是否正确,但现在我会感激任何帮助。

如果有人可以帮助我,我会很高兴和感激。

最诚挚的问候,

亚历

1 个答案:

答案 0 :(得分:0)

使用DATEDIFF

SELECT DATEDIFF(month, '2000-02-10','2000-01-10');

产生1,因为02-10是01-10之后的一个月

可以更改为以获取天数。

参考:http://www.1keydata.com/sql/sql-datediff.html

<强>更新 在MSQL中,您可以使用DATEDIFF,因为它可以作为参数传递一个月,MySQL版本只返回几天。在MySQL中,您可以使用PERIOD_DIFF虽然它不知道每个月的确切天数。

  

PERIOD_DIFF(P1,P2)

“返回P1和P2之间的月数.P1和P2的格式应为YYMM或YYYYMM。请注意,句点P1和P2不是日期值。”

mysql> SELECT PERIOD_DIFF(200802,200703);
        -> 11

如果您需要知道确切的月数不同,则需要进行多步计算。要查找一个月内的天数,您可以使用LAST_DAY函数,并从结果中提取日期部分,并将其用作进一步计算的基础。

 LAST_DAY('2003-02-05');
        -> '2003-02-28'