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

时间:2010-07-07 02:53:28

标签: mysql date

在MySQL中,我可以做类似的事情:

  

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

然后返回:

  

2010-08-02

那很好......现在有一个MySQL功能,我可以用它来查找同一天提前一个月的日期。例如,2010年7月的第一个星期五是2010年7月2日。有没有一种简单的方法可以找到2010年8月的第一个星期五带有SQL语句的内容?

2 个答案:

答案 0 :(得分:1)

它有点复杂,但这里有:

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,但必然是第二个,第三个......(即第二个月X可能会返回第二个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));

理由:CEIL(DAY(x) / 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));

答案 1 :(得分:0)

这可以解决这个问题吗?


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
        )