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

शनिवार से शुरू होने वाले सप्ताहों के लिए वर्ष का सप्ताह

मेरे पास एक समान समस्या थी:मुझे निम्नलिखित नियमों के आधार पर सप्ताह की संख्या की गणना करने की आवश्यकता थी:

  • सप्ताह शुक्रवार से शुरू होता है
  • एक वर्ष के शेष दिनों (वर्ष के अंतिम शुक्रवार के बाद के सभी दिन जो एक सप्ताह पूरा नहीं करते हैं) को अगले वर्ष के पहले सप्ताह में गिना जाना चाहिए।

उदाहरण के लिए:

  • 27/12/2012 (गुरुवार) 2012 का सप्ताह 52 होना चाहिए
  • 28/12/2012 (शुक्रवार) 2013 का पहला सप्ताह होना चाहिए
  • सप्ताह 1 2013 28/12/2012 से 3/1/2013 तक चला जाता है

मैंने यह कथन इन नियमों के आधार पर YEAR और WEEKNUMBER दोनों की गणना करने के लिए किया है, जिन्हें आप आसानी से अपनी परिस्थितियों के अनुकूल बना सकते हैं:

SELECT IF(ceil(( dayofyear(current_date) + dayofweek(date_format(current_date, '%Y-01-01'))+1 )/7) > 52, YEAR(current_date)+1, YEAR(current_date)), 
        IF(ceil(( dayofyear(current_date) + dayofweek(date_format(current_date, '%Y-01-01'))+1 )/7) > 52, 1, ceil(( dayofyear(current_date) + dayofweek(date_format(current_date, '%Y-01-01'))+1 )/7));

मुश्किल हिस्सा सिर्फ यह अभिव्यक्ति है:

ceil(( dayofyear(current_date) + dayofweek(date_format(current_date, '%Y-01-01'))+1 )/7)

शेष (यदि खंड) केवल वर्ष + 1 और सप्ताह =1 सप्ताह 53 बनाने के लिए अभिव्यक्ति के परिणाम को अनुकूलित करने के लिए हैं।

मैं अभिव्यक्ति को यथासंभव सर्वोत्तम रूप से समझाने की कोशिश करूंगा। निम्नलिखित अभिव्यक्ति आपको सप्ताह संख्या शुद्ध सरल देती है (वर्ष के दिन को एक सप्ताह में 7 दिनों से विभाजित किया जाता है):

ceil(( dayofyear(current_date))/7)

लेकिन अब आप इसे शुक्रवार (या किसी अन्य दिन) से शुरू करना चाहते हैं। ऐसा करने के लिए आपको वर्तमान दिन में जोड़ना होगा, पहले सप्ताह के दिन जो पिछले वर्ष का हिस्सा थे (ऐसा लगता है कि आपका करंट वास्तव में कुछ दिन पहले शुरू हुआ था, क्योंकि आपके पहले सप्ताह में पिछले वर्ष के दिन शामिल हैं)। एक्सप्रेशन जनवरी/1 के कार्यदिवस के आधार पर उस ऑफ़सेट की गणना करता है:

dayofweek(date_format(current_date, '%Y-01-01'))+OFFSET

ऑफ़सेट 7 और कार्यदिवस की संख्या के बीच का अंतर है जिसे आप सप्ताह शुरू करना चाहते हैं:

  • 0 शनिवार के लिए
  • 1 शुक्रवार के लिए
  • 2 गुरुवार के लिए
  • 3 बुधवार के लिए...

तो अब आपको इसे पिछले एक में जोड़ना होगा जिसके परिणामस्वरूप उपर्युक्त अभिव्यक्ति होती है जो किसी भी सप्ताह के दिन से शुरू होने वाले सप्ताह की संख्या की गणना करती है और पिछले वर्ष को शुरू करने के लिए सप्ताह 1 मानती है:

ceil(( dayofyear(current_date) + dayofweek(date_format(current_date, '%Y-01-01'))+OFFSET )/7)

फिर मैंने अभी एक IF जोड़ा है जो सप्ताह 53 को सप्ताह 1 में बदल देता है और दूसरा वर्ष में 1 जोड़ने के लिए यदि यह सप्ताह 53 है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlalchemy के माध्यम से निष्पादन करते समय एकाधिक कथन निष्पादित करने में सक्षम करें

  2. यह पता लगाने के 3 तरीके कि क्या कोई स्ट्रिंग MySQL में रेगुलर एक्सप्रेशन से मेल खाती है

  3. MySQL त्रुटि:अधिकतम स्तंभ आकार 767 बाइट्स है

  4. MySQL होस्टिंग के साथ ZEIT Now पर WordPress 5 इंस्टाल करना

  5. sql वर्तमान पंक्ति की अगली या पिछली पंक्ति के लिए एक पंक्ति खींच रहा है