【问题标题】:MySQL: Select date plus 6 months if less than now() plus 1 monthMySQL:如果小于 now() 加 1 个月,则选择日期加 6 个月
【发布时间】:2014-09-23 22:50:14
【问题描述】:

我有一个给定的日期:

2013-12-20

这是产品的发行日期,产品自发行之日起 6 个月后到期。它没有存储的到期日期,所以我想从给定的发布日期检查它是否在 now() 的下个月到期。

所以我的猜测是在发行日期上加上 6 个月,现在检查 + 1 个月的间隔是否到期?

这是我尝试过的:

SELECT * FROM `products` WHERE DATE_ADD(`issue_date`,INTERVAL 6 MONTH) 
< DATE(NOW() + INTERVAL 1 MONTH) ORDER BY `issue_date` ASC

我做错了什么?

【问题讨论】:

  • 为什么在&lt; 符号的一侧使用date_add 而在另一侧使用简单的“+”?
  • @Mureinik 可能是因为我不确定自己在做什么?可以举个例子吗?
  • 只是想了解这是否是故意的。 SELECT * FROM products WHERE DATE_ADD(issue_date, INTERVAL 6 MONTH) &lt; DATE_ADD(NOW(), INTERVAL 1 MONTH) ORDER BY issue_date ASC 怎么样?

标签: php mysql sql date


【解决方案1】:

SELECT * FROM products WHERE Now() <= DATE_ADD(issue_date, INTERVAL 7 MONTH) && Now() >= DATE_ADD(issue_date, INTERVAL 6 MONTH) ORDER BY issue_date ASC;

  • 必须退回的第一个项目的到期日为今天(因此签发日期 + 6 个月 = 今天);
  • 比截止日期明天(所以签发日期 + 6 个月 + 1 天 = 今天);
  • ...
  • 比截止日期从今天起一个月(所以签发日期 + 6 个月 + 1 个月 = 签发日期 + 7 个月 = 今天)

【讨论】:

  • 请添加一些对您的代码、它的作用以及它如何解决问题的解释。这将有助于其他人在未来看到您的答案
【解决方案2】:

这里有一些建议可能会有所帮助
$date = date("y-m-d", strtotime("+6 个月"));
这将导致日期比当前日期晚 6 个月:
同样,
从当前日期起一个月
$date = date("y-m-d", strtotime("+1 个月"));

【讨论】:

    【解决方案3】:

    您的查询要求选择所有将在一个月内过期或已经过期的产品。你可以使用between 子句

    SELECT * FROM `products` WHERE DATE_ADD(`issue_date`,INTERVAL 6 MONTH) between NOW() and  DATE(NOW() + INTERVAL 1 MONTH) ORDER BY `issue_date` ASC
    

    Between clause in Mysql

    【讨论】:

      【解决方案4】:

      如果要检查产品是否在发布之日起 6 个月内到期,如果它在下个月到期,最好在查询中将此 1 月添加到 6 日:

      SELECT * FROM products WHERE issue_date <= DATE_ADD(issue_date,INTERVAL 7 MONTH)
      ORDER BY issue_date ASC;
      

      【讨论】:

        【解决方案5】:

        在回答了几个这样的问题后,我最终解决了这个问题:

        SELECT * FROM  `products` 
        WHERE DATE_ADD(  `issue_date` , INTERVAL 6 MONTH ) 
        < DATE(NOW() + INTERVAL 1 MONTH)
        

        【讨论】:

          【解决方案6】:
          SELECT * FROM `products` 
          WHERE NOW() >= DATE_ADD(`issue_date`,INTERVAL 5 MONTH) 
            AND NOW() <= DATE_ADD(`issue_date`,INTERVAL 6 MONTH) 
          ORDER BY `issue_date` ASC
          

          【讨论】:

            【解决方案7】:

            试试这个

            SELECT * FROM `products` where DATE_ADD(`issue_date`,INTERVAL 6 MONTH) < CURDATE()
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-02-14
              • 1970-01-01
              • 2020-06-07
              • 1970-01-01
              • 1970-01-01
              • 2013-11-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多