【问题标题】:How to check, if the the current date and other dates are longer than 1 month ago?如何检查当前日期和其他日期是否超过 1 个月前?
【发布时间】:2012-01-11 17:16:59
【问题描述】:

我有以下查询:

$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 个月后开始使用。所以我猜“Between-Solution”不适合这里?

我正在努力解决问题,但现在我将不胜感激。

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

最好的问候,

亚历克斯

【问题讨论】:

    标签: mysql datetime date intervals


    【解决方案1】:

    使用 DATEDIFF

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

    yields 1 since 02-10 is 1 month after 01-10

    month可以改为day来获取天数。

    参考: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'
    

    【讨论】:

    • 我试过DATEDIFF (month, CURRENT_DATE(),c.expires),但他不喜欢CURRENT_DATE()。你知道我应该在当前日期放什么吗?
    • 我猜你说的不是 MySQL?因为就像在 MySQL 纪录片中一样,只允许两个表达式。所以我可以得到DATEDIFF(CURDATE(),c.expires) 的日子,但不完全是一个月的输出。这难道不能在 MySQL 中将其转换为月份吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 2020-06-07
    • 2011-02-19
    • 1970-01-01
    • 2017-01-15
    • 2015-01-04
    • 2019-08-07
    相关资源
    最近更新 更多