2012-11-05 39 views

回答

1
SELECT DATE_FORMAT(curdate(), '%M') month_name 
union 
SELECT DATE_FORMAT(date_add(curdate(),interval -1 month), '%M') month_name 
union 
SELECT DATE_FORMAT(date_add(curdate(),interval -2 month), '%M') month_name 
+0

'cur_date()'是不是一個mysql函數。 – Thilo

+0

爲簡單起見,它在mysql上工作 – Vadapalli

4

或許你可以這樣做:

SELECT monthname(date_add(now(), INTERVAL -1 MONTH)) union all 
SELECT monthname(date_add(now(), INTERVAL -2 MONTH)) union all 
SELECT monthname(date_add(now(), INTERVAL -3 MONTH)) union all 
SELECT monthname(date_add(now(), INTERVAL -4 MONTH)) 


SQL fiddle demo

+1

+1。也是第一次我看到一個接受的答案與負面點 - 你被搶劫:) – RocketDonkey

2

@ JoeGJoseph的答案是什麼,我會去的,但這裏是一個基於過程的例子。這使您可以將過程月數傳遞給過程並返回以前的月份名稱。它不漂亮,可能無法正常工作,並且充滿了錯誤,但我想這會讓它變得有趣?你可以看到小提琴here,這裏是程序代碼(注意,這可能需要調整工作SQLFiddle之外,但現在我不能測試它在其他地方:)):

DROP TABLE IF EXISTS my_months; 
CREATE TABLE my_months (month_name VARCHAR(200)); 

CREATE PROCEDURE LAST_MONTHS(IN num_months INT(10)) 
BEGIN 
     DECLARE a INT Default -1 ; 
     simple_loop: LOOP 
     SET a=a+1; 
     INSERT INTO my_months VALUES 
      (MONTHNAME(DATE_ADD(CURRENT_DATE, INTERVAL-a MONTH))); 
     IF a=num_months - 1 THEN 
      LEAVE simple_loop; 
     END IF; 
    END LOOP simple_loop; 
END// 

然後你可以從你的像主查詢調用它:

CALL LAST_MONTHS(); 
SELECT * FROM my_months; 

我會用@ JoeGJoseph去,雖然,因爲這可能是矯枉過正,他的更優雅:)

+0

+1 ..很好的工作解決方案... :) –

+0

@JoeGJoseph哈,謝謝 - '工作'是一種方式來說(它我會說'完全沒有必要':))。 – RocketDonkey

相關問題