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 に答える