1

我是mysql的新手。我想从 sql 中了解最近 4 个月的名称。

喜欢

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

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

4

3 回答 3

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小提琴演示

于 2012-11-05T09:35:18.797 回答
2

@JoeGJoseph 的答案是我想要的,但这是一个基于过程的示例。这允许您将可变数量的月份传递给过程并返回前一个月的名称。它不漂亮,可能无法正常工作并且充满错误,但我想这很有趣?你可以在这里看到小提琴,这里是过程代码(请注意,这可能需要调整以在 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,因为这可能有点矫枉过正,而且他更优雅:)

于 2012-11-05T10:00:17.767 回答
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
于 2012-11-05T09:34:43.260 回答