我是mysql的新手。我想从 sql 中了解最近 4 个月的名称。
喜欢
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'Month') AS month
FROM dual
CONNECT BY LEVEL < 4
但是如何用mysql做到这一点?
也许你可以这样做:
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))
@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,因为这可能有点矫枉过正,而且他更优雅:)
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