ตัวอย่างการใช้ WHILE LOOP ร่วมกับ IF STATEMENT ใน MySQL Stored Procedure
Stored Procedure คำนวณวันทำงานในเดือนปัจจุบัน
mysql> DELIMITER //
mysql> CREATE PROCEDURE sp_getDaysDemo()
BEGIN
SELECT MONTH(CURDATE()) INTO @current_month;
SELECT MONTHNAME(CURDATE()) INTO @current_monthname;
SELECT DAY(LAST_DAY(CURDATE())) INTO @total_numberofdays;
SELECT CAST(DATE_FORMAT(NOW(), '%Y-%m-01') AS DATE) INTO @check_weekday;
SELECT DAY(@check_weekday) INTO @check_day;
SET @count_days = 0;
SET @workdays = 0;
WHILE (@count_days < @total_numberofdays) DO
IF (WEEKDAY(@check_weekday) < 5) THEN
SET @workdays = @workdays + 1;
END IF;
SET @count_days = @count_days + 1;
SELECT ADDDATE(@check_weekday, INTERVAL 1 DAY) INTO @check_weekday;
END WHILE;
SELECT @current_month, @current_monthname, @total_numberofdays, @check_weekday, @check_day;
END //
Query OK, 0 rows affected (0.24 sec)
mysql> DELIMITER ;
เรียกใช้ Procedure:
mysql> CALL sp_getDaysDemo();
ผลลัพธ์ (ตัวอย่างเดือนมกราคม 31 วัน):
+----------------+--------------------+---------------------+----------------+------------+ | @current_month | @current_monthname | @total_numberofdays | @check_weekday | @check_day | +----------------+--------------------+---------------------+----------------+------------+ | 1 | January | 31 | 2019-02-01 | 1 | +----------------+--------------------+---------------------+----------------+------------+
Procedure นี้นับจำนวนวันทำงาน (จันทร์-ศุกร์) ในเดือนปัจจุบัน โดยวนลูปทุกวันและเช็ค WEEKDAY