我是mysql的新手。我想知道来自sql的最近4个月的名字。
像
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -level), 'Month') AS month
FROM dual
CONNECT BY LEVEL < 4
但是如何用mysql做到这一点?
答案 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))
答案 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