私は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