Mysql 在同一天提前一个月找到日期

Mysql 在同一天提前一个月找到日期,mysql,date,Mysql,Date,在MySQL中,我可以执行以下操作: 选择日期添加“2010-07-02”,间隔1个月 这就返回了: 2010-08-02 太好了。。。现在有一个MySQL函数,我可以使用它来查找在同一天提前一个月的日期。例如,2010年7月2日是2010年7月的第一个星期五。有没有一种简单的方法可以通过SQL语句找到2010年8月的第一个星期五是什么?它有点复杂,但下面是: SELECT IF(MONTH(DATE_ADD('2010-07-02', INTERVAL 28 DAY)) = MONTH('20

在MySQL中,我可以执行以下操作:

选择日期添加“2010-07-02”,间隔1个月

这就返回了:

2010-08-02


太好了。。。现在有一个MySQL函数,我可以使用它来查找在同一天提前一个月的日期。例如,2010年7月2日是2010年7月的第一个星期五。有没有一种简单的方法可以通过SQL语句找到2010年8月的第一个星期五是什么?

它有点复杂,但下面是:

SELECT IF(MONTH(DATE_ADD('2010-07-02', INTERVAL 28 DAY)) = MONTH('2010-07-02'), 
  DATE_ADD('2010-07-02', INTERVAL 35 DAY),
  DATE_ADD('2010-07-02', INTERVAL 28 DAY));
理由:如果你增加4周或5周,你仍然在同一天;由于所有月份都在28到35天之间,如果4周后仍然是同一个月,则再增加一周

更新:嗯,我认为这不是很好-它适用于本月的第一个X,但必须适用于第二,第三。。。i、 e.本月第3个X可能在下个月返回第2个X。尝试2:

SELECT IF(
  CEIL(DAY(DATE_ADD('2010-07-02', INTERVAL 35 DAY)) / 7) = CEIL(DAY('2010-07-02') / 7), 
  DATE_ADD('2010-07-02', INTERVAL 35 DAY),
  DATE_ADD('2010-07-02', INTERVAL 28 DAY));
理由:CEILDAYx/7是x的周数。如果你加上5个星期,情况有所不同,那么再加上4个星期

更新2:哈哈,我今天糟透了,我应该在发帖前好好想想。。。周通常被定义为周一-周日或周日-周一,而不是从一个月开始到6天后。为了弥补这一点:

SELECT IF(
    CEIL((DAY(DATE_ADD('2010-07-02', INTERVAL 28 DAY)) - DAYOFWEEK('2010-07-02')) / 7)
    = CEIL((DAY('2010-07-02') - DAYOFWEEK('2010-07-02')) / 7), 
  DATE_ADD('2010-07-02', INTERVAL 28 DAY),
  DATE_ADD('2010-07-02', INTERVAL 35 DAY));

这能奏效吗


SELECT DATE_ADD(
            DATE_SUB(
                DATE_ADD('2010-07-06', INTERVAL 1 MONTH),

                INTERVAL DAYOFWEEK(DATE_ADD('2010-07-06', INTERVAL 1 MONTH)) DAY
            ),

            INTERVAL DAYOFWEEK('2010-07-06') DAY
        )

希望你看到这个。我的第一次尝试有一个缺陷:啊,对。我也完全忽略了这一点。我感谢后续行动。非常感谢!是的,没问题。我真的希望不会有第四个:DUpdate 2也不太管用。第二周的数字为零。CEIL中的声明为负数。失败的例子:2010-07-06转到2010-08-10。2010年07月06日是本月的第一个星期二。2010年08月10日是本月的第二个星期二。这似乎对2010年6月1日之类的情况不起作用,但在我添加代码添加7天之后,如果检索到的月份与开始月份在同一个月,情况似乎会更好。迄今为止:p