Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

आप date_sub से सप्ताहांत कैसे निकालते हैं?

यह प्रश्न कार्य दिवसों को घटाने के बारे में है। यह मानते हुए कि सप्ताहांत शनिवार-रविवार है, हम समाधान इस प्रकार लिख सकते हैं:

हम जानते हैं कि:

  • हर पूरे सप्ताह में 5 कार्य दिवस होते हैं।
  • इस प्रकार,
    • num_of_weeks =floor(@num_working_days / 5)
    • delta_days =@num_working_days % 5

तो, पहला सन्निकटन हो सकता है:

SET @num_working_days = 4; -- pick any integer
SET @num_days = 7 * FLOOR(@num_working_days / 5) - @num_working_days % 5;     
SELECT DATE_SUB(NOW(), INTERVAL @num_days DAY)

हालांकि, यह निम्नलिखित और इसी तरह के मामलों में काम नहीं करेगा:

आम तौर पर, यह विफल हो जाएगा यदि:

WEEKDAY(NOW()) - @num_working_days % 5 < 0

इसका हिसाब लगाने के लिए, जब भी यह शर्त पूरी होती है तो अतिरिक्त 2 दिन घटाए जाने चाहिए।

  • overflow_days =2 * (WEEKDAY(NOW()) - @num_working_days % 5 < 0)

तो, दूसरा सन्निकटन होगा:

SET @num_working_days = 4;
SET @overflow_days = 2 * (WEEKDAY(NOW()) - @num_working_days % 5 < 0)
SET @num_days = 7 * FLOOR(@num_working_days / 5) - @num_working_days % 5;

SELECT DATE_SUB(NOW(), INTERVAL @num_days DAY)

आखिरकार,

यह तब तक काम करेगा जब तक now() week-end में नहीं है दिन। उस स्थिति के लिए, आपको now() . को बदलना होगा पिछले सप्ताह की समाप्ति तिथि के साथ उपरोक्त सूत्र में:

  • सप्ताहांत_सुधार =DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) % 5 DAY)

जो भयानक दिखने वाले लेकिन पूरी तरह से काम करने की ओर ले जाता है:

SET @num_working_days = 4;
SET @weekend_correction = DATE_SUB(NOW(), INTERVAL WEEKDAY(NOW()) % 5 DAY);
SET @overflow_days = 2 * (WEEKDAY(@weekend_correction) - @num_working_days % 5 < 0);
SET @num_days = 7 * FLOOR(@num_working_days / 5) - @num_working_days % 5;

SELECT DATE_SUB(@weekend_correction, INTERVAL @num_days DAY); 

अब, उत्पादन में, मैं अनुशंसा करता हूं कि आप इस तर्क को समाहित करने के लिए अपने MySQL सर्वर पर एक फ़ंक्शन बनाएं, और जब भी आपको कार्य दिवसों को घटाने की आवश्यकता हो, तो आप इस फ़ंक्शन को कॉल कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL सिलेक्ट आईडी जो एक कॉलम के लिए कई विशिष्ट मानों के साथ अलग-अलग पंक्तियों पर होती है

  2. डेटाबेस पासवर्ड कैसे बदलें

  3. DB तालिकाओं में बहुभाषी क्षेत्र

  4. Mysql में एक सेल का डेटा बदलें

  5. MySQL - चयन पर पंक्ति संख्या प्राप्त करें