首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果当前日期和其他日期大于1个月前,如何检查?

问如果当前日期和其他日期大于1个月前,如何检查?
EN

Stack Overflow用户
提问于 2012-01-12 01:16:59
回答 1查看 779关注 0票数 0

我得到了以下查询:

代码语言:javascript
复制
$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.expires是DATETIME),或者如果最后一张账单(b.date)是在1个月前创建的。还有一件事是,如果优惠券还没有开始,我不想创建任何账单。这是可能的,因为我创建的优惠券将在3个月内开始。所以我猜“中间解决方案”不适合这里?

我正在试着想办法把它做好,但现在我会感谢任何人的帮助。

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

诚挚的问候,

亚历克斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-12 01:27:08

使用DATEDIFF

代码语言:javascript
复制
SELECT DATEDIFF(month, '2000-02-10','2000-01-10');

自02-10年度以来的收益率1是01-10年度后的一个月

可以将更改为,以获取天数。

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

UPDATE:在MSQL中你可以使用DATEDIFF,因为它可以作为参数传递给MySQL,而DATEDIFF版本只返回天。在MySQL中,您可以使用PERIOD_DIFF。虽然不知道每个月的确切天数。

PERIOD_DIFF(P1,P2)

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

代码语言:javascript
复制
mysql> SELECT PERIOD_DIFF(200802,200703);
        -> 11

如果您需要知道到底有多少个月不同,您需要进行多步计算。要找出一个月中的天数,您可以使用LAST_DAY函数,并从结果中提取day部分,并将其用作进一步计算的基础。

代码语言:javascript
复制
 LAST_DAY('2003-02-05');
        -> '2003-02-28'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8823632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档