2010-07-07 47 views
0

在MySQL中,我可以這樣做:尋找日期提前一個月在同一天

SELECT DATE_ADD( '2010-07-02',間隔1個月)

並返回:

2010-08-02

這是偉大的......現在是有A M ySQL函數,我可以使用它來查找在同一天提前一個月的日期。例如,2010年7月2日將在2010年7月的第一個星期五。有沒有簡單的方法來查找2010年8月的第一個星期五是用SQL語句?

+0

希望你看到這個。我的第一次嘗試有一個缺陷:) – Amadan 2010-07-07 03:40:49

+0

...正如我的第二個:D – Amadan 2010-07-07 04:01:11

回答

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)); 
+0

啊,對。我完全忽略了這一點。我欣賞後續行動。非常感謝! – 2010-07-07 03:42:22

+0

是的,沒問題。我真的希望沒有第四個:D – Amadan 2010-07-07 04:01:31

+0

更新2也不是很有效。第二個「週數」爲零(CEIL()中的語句爲負數)。失敗的例子:2010-07-06到2010-08-10。 2010-07-06位於本月的第一個星期二。 2010-08-10位於本月的第二個星期二。 – 2010-07-08 06:47:00

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 
     ) 
+0

這似乎並不適用於2010年6月1日之類的內容,但是如果檢索月份與開始月份相同的月份中添加了代碼以添加7天,則事情似乎會變得更好。到目前爲止:p – 2010-07-08 07:37:13

相關問題