获取MySQL一年中的最后4个月?

时间:2012-11-05 09:23:29

标签: mysql sql

我是mysql的新手。我想知道来自sql的最近4个月的名字。

  SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'Month') AS month
    FROM dual
    CONNECT BY LEVEL < 4 

但是如何用mysql做到这一点?

3 个答案:

答案 0 :(得分: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 :(得分: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一起去,因为这可能是矫枉过正而且他更优雅:)

答案 2 :(得分: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
相关问题