我是新來的MySQL。我想知道從SQL最近4個月的名字。獲取MySQL中最後4個月的數據嗎?
像
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'Month') AS month
FROM dual
CONNECT BY LEVEL < 4
,但如何能與MySQL做什麼?
我是新來的MySQL。我想知道從SQL最近4個月的名字。獲取MySQL中最後4個月的數據嗎?
像
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'Month') AS month
FROM dual
CONNECT BY LEVEL < 4
,但如何能與MySQL做什麼?
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
或許你可以這樣做:
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))
+1。也是第一次我看到一個接受的答案與負面點 - 你被搶劫:) – RocketDonkey
@ 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去,雖然,因爲這可能是矯枉過正,他的更優雅:)
+1 ..很好的工作解決方案... :) –
@JoeGJoseph哈,謝謝 - '工作'是一種方式來說(它我會說'完全沒有必要':))。 – RocketDonkey
'cur_date()'是不是一個mysql函數。 – Thilo
爲簡單起見,它在mysql上工作 – Vadapalli