मुख्य सामग्री पर जाएं
मॉड्यूल 6 · पाठ 2 का 4पाठ्यक्रम में 22/57~12 min
मॉड्यूल पाठ (2/4)

दिनांक और टाइमस्टैम्प फ़ंक्शन

दिनांक और टाइमस्टैम्प हर जगह हैं: ऑर्डर, लॉगिन, ईवेंट, बिलिंग। में इस पाठ में हम देखेंगे कि किसी दिनांक (वर्ष, माह...) से भाग कैसे निकालें**, इसे छोटा करें इसे एक ग्रैन्युलैरिटी (माह, सप्ताह...) तक, **अंतराल** की गणना करें और अंतर, और विभिन्न अवधियों में तुलना करें।

आधार प्रकार

PostgreSQL अलग करता है:

  • DATE — केवल दिनांक, प्रारूप YYYY-MM-DD;
  • TIMESTAMP — दिनांक + समय, कोई समय क्षेत्र नहीं;
  • TIMESTAMPTZ — दिनांक + समय + समयक्षेत्र;
  • INTERVAL - एक अवधि (जैसे '3 days', '2 hours 30 minutes')।

हमारे ecommerce डेटासेट में:

कॉलमप्रकार
customers.signed_up_onDATE
orders.ordered_atTIMESTAMP
orders.shipped_atTIMESTAMP (NULL हो सकता है)

उद्धरण - एक भाग पढ़ना

EXTRACT(part FROM date) एक संख्या निकालता है:

SQL
SELECT EXTRACT(YEAR  FROM ordered_at) AS year,
       EXTRACT(MONTH FROM ordered_at) AS month,
       EXTRACT(DOW   FROM ordered_at) AS day_of_week  -- 0=domenica
FROM   orders;

सबसे अधिक उपयोग किए जाने वाले हिस्से: YEAR, MONTH, DAY, HOUR, MINUTE, DOW (दिन सप्ताह 0-6 का), DOY (वर्ष का दिन)।

DATE_TRUNC - पूर्णांकित करना

DATE_TRUNC('part', date) दिनांक को विवरणात्मकता में "छोटा" कर देता है। यह है महीने, सप्ताह, घंटे के अनुसार एकत्रीकरण के लिए आवश्यक:

SQL
-- Tutti gli ordini fatti in "marzo 2025" cadono nello stesso bucket:
SELECT DATE_TRUNC('month', ordered_at) AS month,
       COUNT(*) AS order_count
FROM   orders
GROUP BY month
ORDER BY month;

वैध भाग: 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second'।

पठनीयता के लिए, जब समय की आवश्यकता नहीं होती है तो लोग अक्सर DATE पर जाते हैं: DATE_TRUNC('month', ordered_at)::date.

अंतर और अंतराल

दो TIMESTAMP घटाने पर एक INTERVAL बनता है:

SQL
SELECT id,
       shipped_at - ordered_at AS wait_time
FROM   orders
WHERE  shipped_at IS NOT NULL;

INTERVAL शाब्दिक के साथ तुलना:

SQL
WHERE  shipped_at - ordered_at > INTERVAL '1 day'

किसी तारीख में दिन जोड़ना:

SQL
SELECT signed_up_on + INTERVAL '30 days' AS trial_expiration
FROM   customers;

इसे अजमाएं

व्यायाम#sql.m6.l2.e1
प्रयास: 0लोड हो रहा है...

गणना करें कि प्रति वर्ष कितने ऑर्डर दिए गए। दो कॉलम: वर्ष (पूर्णांक) और order_count. वर्ष के अनुसार क्रम बढ़ते हुए।

संपादक लोड हो रहा है...
संकेत दिखाएँ

Extract(YEAR FROM order_at) एक NUMERIC लौटाता है: पठनीयता के लिए इसे ::int के साथ int में डालें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम की समीक्षा करें

व्यायाम#sql.m6.l2.e2
प्रयास: 0लोड हो रहा है...

2024 के प्रत्येक महीने के लिए, महीने का पहला दिन (कॉलम माह, प्रकार की तारीख) और ऑर्डर की संख्या दिखाएं। महीने के हिसाब से ऑर्डर करें.

संपादक लोड हो रहा है...
संकेत दिखाएँ

DATE_TRUNC('महीना', order_at) महीने का पहला दिन टाइमस्टैम्प के रूप में लौटाता है; ::दिनांक इसे दिनांक में बदल देता है।

3 प्रयासों के बाद समाधान उपलब्ध है