2013-06-17 16 views
12

MySQLのストアドルーチンを作成して、1か月間の営業日数(営業日は月曜日から金曜日まで)を把握したいと考えています。IF LOOP WITH IF STATEMENT MYSQL

これは構文エラーですが、構文エラーの内容はわかりません。

1064 - SQL構文に誤りがあります。ライン2

で 'THEN WHILE(@daycount < @totaldays)(WEEKDAY(@checkweekday)< 6)場合の対処 ' 近くを使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください私の構文エラーは、以下である:

WHILE(@daycount < @totaldays) DO 
      IF (WEEKDAY(@checkweekday) < 6) THEN 

マイコード:

 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; 

    BEGIN 
     WHILE(@daycount < @totaldays) DO 
      IF (WEEKDAY(@checkweekday) < 6) THEN 
      SET @workdays = @workdays+1; 
      END IF; 
      SET @daycount = @daycount+1; 
      SELECT ADDDATE('@checkweekday', INTERVAL 1 DAY) INTO @checkweekday; 
     END WHILE; 
    END; 
    SELECT @workdays; 

ができ、誰かが支援することですか?私はあなたがストアドプロシージャの外の条件文を持つことができないことを発見した

SET @workdays = 0; 
    IF (WEEKDAY('2013-06-13') < 6) THEN 
     SET @workdays = @workdays+1; 
    END IF; 
    SELECT @workdays; 
+0

関数 'FIRST_DAY()'はありますか? –

+1

はい、あります。ウェブホストは実際にその機能を自動的に持っています。私は自分自身を書いて、自分の機能を使わずに機能を使用しても機能することを認識しました。 first_day()はエラーがどこにあるのかわかりません。それは問題なく通過します。 – scrfix

答えて

15

:私はそれはおそらくこれとは何かを持っているので、次のコードビットと同じエラーが表示さ

UPDATE 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/tutorials/an-introduction-to-stored-procedures/を読むことをお勧めします。

必要first_day機能は次のとおりです。 手順を示すHow to get first day of every corresponding month in mysql?

は、単にその後に次のコードを使用し

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

のEND WHILE下に次の行を追加し、ENDの上 を働いていますSQLクエリウィンドウ。

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

注:あなたがこれを使用する場合このコードは(そのことについてまたは任意の休日)全国祝祭日をアカウントになりませんのでご注意ください。