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

दिए गए महीने के लिए सप्ताह के अंतराल की श्रृंखला उत्पन्न करें

SELECT generate_series(date_trunc('week', date '2013-02-01' + interval '6 days')
                     , date_trunc('week', date '2013-02-01' + interval '1 month - 1 day')
                     , interval '1 week')::date AS day
UNION  SELECT date '2013-02-01'
ORDER  BY 1;

इस संस्करण को उप-चयन की आवश्यकता नहीं है, GREATEST या GROUP BY और केवल आवश्यक पंक्तियां उत्पन्न करता है। सरल, तेज। यह UNION से सस्ता है एक पंक्ति।

  • महीने के पहले दिन . में 6 दिन जोड़ें date_trunc('week', ...) . से पहले महीने के पहले सोमवार की गणना करने के लिए ।

  • date_trunc('week', ...) . से 1 दिन पहले 1 महीना जोड़ें और घटाएं महीने का अंतिम सोमवार . पाने के लिए .
    इसे आसानी से एक interval में भरा जा सकता है अभिव्यक्ति:'1 month - 1 day'

  • UNION (नहीं UNION ALL ) इसे जोड़ने के लिए महीने का पहला दिन, जब तक कि इसे पहले से ही सोमवार के रूप में शामिल न किया गया हो।

  • ध्यान दें कि date + interval timestamp में परिणाम , जो यहाँ इष्टतम है। विस्तृत विवरण:

स्वचालन

आप CTE में दिनांक श्रृंखला की शुरुआत प्रदान कर सकते हैं:

WITH t(d) AS (SELECT date '2013-02-01')  -- enter 1st of month once
SELECT generate_series(date_trunc('week', d + interval '6 days')
                     , date_trunc('week', d + interval '1 month - 1 day')
                     , interval '1 week')::date AS day
FROM   t
UNION  SELECT d FROM t
ORDER  BY 1;

या बार-बार कॉल करने की सुविधा के लिए इसे एक साधारण SQL फ़ंक्शन में लपेटें:

CREATE OR REPLACE FUNCTION f_week_starts_this_month(date)
  RETURNS SETOF date AS
$func$
SELECT generate_series(date_trunc('week', $1 + interval '6 days')
                     , date_trunc('week', $1 + interval '1 month - 1 day')
                     , interval '1 week')::date AS day
UNION
SELECT $1
ORDER  BY 1
$func$  LANGUAGE sql IMMUTABLE;

कॉल करें:

SELECT * FROM f_week_starts_this_month('2013-02-01');

आप महीने के पहले दिन के लिए तारीख पास करेंगे, लेकिन यह किसी भी . के लिए काम करता है दिनांक। आप पहले दिन और अगले महीने के सभी सोमवार।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक आंतरिक जुड़ाव से मिली जल्द से जल्द तारीख की गिनती?

  2. बड़े पैमाने पर टेबल पर अपडेट क्वेरी को कैसे तेज करें

  3. डिफ़ॉल्ट क्रम के आधार पर 2 सेट में शामिल हों

  4. JDBC का उपयोग करके PostgreSQL पर धीरे-धीरे डालें

  5. डेटाबेस के लिए CREATE स्क्रिप्ट निर्यात करें