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

Postgres में दो तिथियों के बीच रविवार को छोड़कर दिनों की गणना कैसे करें?

आपको "दो तिथियों के बीच" . को परिभाषित करने की आवश्यकता है अधिक क़रीबी। लोअर और अपर बाउंड शामिल या बहिष्कृत? एक सामान्य परिभाषा होगी शामिल निचला और बहिष्कृत करें एक अंतराल की ऊपरी सीमा। साथ ही, परिणाम को 0 के रूप में परिभाषित करें जब निचली और ऊपरी सीमा समान हो। यह परिभाषा दिनांक घटाव के साथ मेल खाती है बिल्कुल

SELECT date '2017-01-31' - date '2017-01-01' AS days_between

रविवार को छोड़कर यह सटीक परिभाषा महत्वपूर्ण है। दी गई परिभाषा के लिए सूर्य-सूर्य (1 सप्ताह बाद) के अंतराल में ऊपरी सीमा शामिल नहीं है, इसलिए केवल 1 है रविवार को घटाना है।

interval in days  | sundays
0                 | 0
1-6               | 0 or 1
7                 | 1
8-13              | 1 or 2
14                | 2
...

7 दिनों के अंतराल में हमेशा ठीक एक रविवार शामिल होता है।

हम एक सादे पूर्णांक विभाजन के साथ न्यूनतम परिणाम प्राप्त कर सकते हैं (दिन / 7 ), जो परिणाम को छोटा कर देता है।

शेष 1-6 दिनों के लिए अतिरिक्त रविवार अंतराल के पहले दिन पर निर्भर करता है। अगर यह रविवार है, तो बिंगो; अगर यह सोमवार है, तो बहुत बुरा है। आदि। हम इससे एक सरल सूत्र प्राप्त कर सकते हैं:

SELECT days, sundays, days - sundays AS days_without_sundays
FROM  (
   SELECT z - a AS days
      , ((z - a) + EXTRACT(isodow FROM a)::int - 1 ) / 7 AS sundays
   FROM  (SELECT date '2017-01-02' AS a       -- your interval here
               , date '2017-01-30' AS z) tbl
   ) sub;

किसी भी . के लिए काम करता है दिया गया अंतराल।
नोट:isodow , नहीं dow EXTRACT() . के लिए ।

शामिल करने के लिए ऊपरी सीमा, बस z - a . को बदलें (z - a) + 1 . के साथ . (संचालक प्राथमिकता के कारण, कोष्ठक के बिना काम करेगा, लेकिन बेहतर होगा कि स्पष्ट हो।)

प्रदर्शन विशेषता O(1) . है (स्थिर) O(N) . के साथ जेनरेट किए गए सेट पर सशर्त समुच्चय के विपरीत ।

संबंधित:

  • मैं PostgreSQL का उपयोग करके पिछले महीने का अंतिम दिन कैसे निर्धारित करूं?
  • PostgreSQL में 2 तिथियों के बीच काम के घंटों की गणना करें


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में भौतिक प्रतिकृति तंत्र

  2. SQLAlchemy में कनेक्शन टाइमआउट कैसे सेट करें?

  3. पासवर्ड के बिना psql कमांड के साथ बैच फ़ाइल चलाएँ

  4. डायनेमिक SQL का उपयोग करके समग्र चर फ़ील्ड का मान कैसे सेट करें

  5. Postgres में पुनरावर्ती JSON कुंजी एकत्र करें