MySQLのストアドルーチンを作成して、1か月の営業日または就業日数を計算します(就業日は月曜日から金曜日です)。
構文エラーですが、構文エラーが何なのかわかりません。それは私に言うだけです:
1064-SQL構文にエラーがあります。使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルで、 'WHILE(@daycount <@totaldays)DO IF(WEEKDAY(@checkweekday)<6)THEN'の2行目で確認してください。
私の構文エラーは次のとおりです。
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;
誰かが支援できますか?
[〜#〜] update [〜#〜]次のコードで同じエラーが表示されるので、おそらくこれと関係があります。
SET @workdays = 0;
IF (WEEKDAY('2013-06-13') < 6) THEN
SET @workdays = @workdays+1;
END IF;
SELECT @workdays;
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関数は次のとおりです。 mysqlで対応するすべての月の初日を取得する方法?
プロシージャが機能していることを示すEND WHILEおよびENDの上に次の行を追加するだけです
SELECT @curmonth,@curmonthname,@totaldays,@daycount,@workdays,@checkweekday,@checkday;
次に、SQLクエリウィンドウで次のコードを使用します。
call test2 /* or whatever you changed the name of the stored procedure to */
注:これを使用する場合、このコードは全国的に観察される祝日(またはそのことに関する祝日)を考慮に入れないことに注意してください。