स्टोर्ड प्रोसीजर में WHILE लूप और IF का उपयोग
MySQL स्टोर्ड प्रोसीजर में WHILE लूप और IF स्टेटमेंट का उपयोग करके वर्तमान महीने के कार्यदिवसों (सोमवार-शुक्रवार) की गणना करने का उदाहरण।
स्टोर्ड प्रोसीजर बनाना
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 लूप: महीने के प्रत्येक दिन के लिए
WHILE (@count_days < @total_numberofdays) DO
-- IF स्टेटमेंट: यदि कार्यदिवस (0=सोमवार ... 4=शुक्रवार)
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 //
mysql> DELIMITER ;
प्रोसीजर कॉल करना
CALL sp_getDaysDemo();
आउटपुट (उदाहरण: जनवरी 2019)
+----------------+--------------------+---------------------+----------------+------------+ | @current_month | @current_monthname | @total_numberofdays | @check_weekday | @check_day | +----------------+--------------------+---------------------+----------------+------------+ | 1 | January | 31 | 2019-02-01 | 1 | +----------------+--------------------+---------------------+----------------+------------+
कोड व्याख्या
| लाइन | उद्देश्य |
|---|---|
MONTH(CURDATE()) | वर्तमान महीना नंबर (1-12) |
MONTHNAME(CURDATE()) | महीने का नाम |
DAY(LAST_DAY(CURDATE())) | वर्तमान महीने में कुल दिन |
DATE_FORMAT(NOW(), '%Y-%m-01') | महीने का पहला दिन |
WEEKDAY(date) | सप्ताह का दिन (0=सोमवार, 6=रविवार) |
WHILE ... DO ... END WHILE | लूप जब तक शर्त सत्य |
IF ... THEN ... END IF | सशर्त निष्पादन |
मुख्य बिंदु
WHILEलूप के लिए शर्त कोष्ठक में:WHILE (condition) DO।- लूप के अंदर काउंटर अपडेट करना न भूलें (अन्यथा अनंत लूप)।
LEAVE label_nameसे लूप से जल्दी बाहर निकल सकते हैं।- उपयोगकर्ता-परिभाषित वेरिएबल (
@var) सेशन में बने रहते हैं।
नोट
MySQL 8.0+ में, रिकर्सिव CTE या विंडो फंक्शन का उपयोग करके इसे सेट-आधारित क्वेरी के रूप में लिखना अधिक कुशल हो सकता है।