sql >> データベース >  >> RDS >> Mysql

MySQLでIFステートメントを使用してWHILEループを設定するにはどうすればよいですか?

    mysqlのストアドプロシージャの外部に条件を設定できないことを発見しました。これが構文エラーの理由です。必要なコードを間に入れるとすぐに

    BEGIN
    SELECT MONTH(CURDATE()) INTO @curmonth;
    SELECT MONTHNAME(CURDATE()) INTO @curmonthname;
    SELECT DAY(LAST_DAY(CURDATE())) INTO @totaldays;
    SELECT FIRST_DAY(CURDATE()) INTO @checkweekday;
    SELECT DAY(@checkweekday) INTO @checkday;
    SET @daycount = 0;
    SET @workdays = 0;
    
      WHILE(@daycount < @totaldays) DO
        IF (WEEKDAY(@checkweekday) < 5) THEN
          SET @workdays = @workdays+1;
        END IF;
        SET @daycount = @daycount+1;
        SELECT ADDDATE(@checkweekday, INTERVAL 1 DAY) INTO @checkweekday;
      END WHILE;
    END
    

    他の人のためだけに

    phpmyadminでルーチンを作成する方法がわからない場合は、これをSQLクエリに入れることができます

    delimiter ;;
    drop procedure if exists test2;;
    create procedure test2()
    begin
    select ‘Hello World’;
    end
    ;;
    

    クエリを実行します。これにより、test2という名前のストアドプロシージャまたはストアドルーチンが作成されます。次に、[ルーチン]タブに移動し、ストアドプロシージャを編集して必要なものにします。また、http://net.tutsplus.com/を読むことをお勧めします。チュートリアル/ストアドプロシージャの紹介/ ストアドプロシージャから始めている場合。

    必要なfirst_day関数は次のとおりです。 mysqlで対応する毎月の初日を取得するにはどうすればよいですか?

    手順の表示が機能している ENDWHILEの下とENDの上に次の行を追加するだけです

    SELECT @curmonth,@curmonthname,@totaldays,@daycount,@workdays,@checkweekday,@checkday;
    

    次に、SQLクエリウィンドウで次のコードを使用します。

    call test2 /* or whatever you changed the name of the stored procedure to */
    

    注: これを使用する場合、このコードは全国的に観察される休日(またはそれに関する休日)を考慮に入れていないことに注意してください。




    1. PHP変数を使用してMySQLテーブルを作成します

    2. DBMSとは何ですか? –データベース管理システムの包括的なガイド

    3. mysqlの特定のテーブルに対して2ずつ自動インクリメントする方法

    4. 「アクティブ」フラグかどうか?