Tôi đã phát hiện ra rằng bạn không thể có các điều kiện bên ngoài thủ tục được lưu trữ trong mysql. Đây là lý do tại sao lỗi cú pháp. Ngay sau khi tôi đặt mã mà tôi cần giữa
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
Chỉ dành cho những người khác :
Nếu bạn không chắc chắn về cách tạo quy trình trong phpmyadmin, bạn có thể đặt điều này trong truy vấn SQL
delimiter ;;
drop procedure if exists test2;;
create procedure test2()
begin
select ‘Hello World’;
end
;;
Chạy truy vấn. Điều này sẽ tạo ra một thủ tục được lưu trữ hoặc quy trình được lưu trữ có tên là test2. Bây giờ, hãy chuyển đến tab quy trình và chỉnh sửa quy trình được lưu trữ để trở thành những gì bạn muốn. Tôi cũng khuyên bạn nên đọc http://net.tutsplus.com/ hướng dẫn / an-giới thiệu-quy-trình-lưu-trữ / nếu bạn đang bắt đầu với các thủ tục được lưu trữ.
Hàm first_day bạn cần là: Làm cách nào để có được ngày đầu tiên của mỗi tháng tương ứng trong mysql?
Hiển thị Quy trình đang hoạt động Chỉ cần thêm dòng sau vào bên dưới END WHILE và bên trên END
SELECT @curmonth,@curmonthname,@totaldays,@daycount,@workdays,@checkweekday,@checkday;
Sau đó, sử dụng mã sau trong Cửa sổ truy vấn SQL.
call test2 /* or whatever you changed the name of the stored procedure to */
LƯU Ý: Nếu bạn sử dụng mã này, xin lưu ý rằng mã này không tính đến các ngày lễ được tổ chức trên toàn quốc (hoặc bất kỳ ngày lễ nào cho vấn đề đó).