মডিউল পাঠ (2/4)
তারিখ এবং টাইমস্ট্যাম্প ফাংশন
তারিখ এবং টাইমস্ট্যাম্প সর্বত্র রয়েছে: অর্ডার, লগইন, ইভেন্ট, বিলিং। ইন এই পাঠে আমরা দেখি কিভাবে একটি তারিখ (বছর, মাস…) থেকে **অংশগুলো* বের করতে হয়। ছেঁটে এটিকে গ্রানুলিটি (মাস, সপ্তাহ…), **ব্যবধান** গণনা করুন এবং পার্থক্য, এবং পিরিয়ড জুড়ে তুলনা করুন।
ভিত্তি প্রকার
PostgreSQL আলাদা করে:
DATE— শুধুমাত্র তারিখ, বিন্যাসYYYY-MM-DD;TIMESTAMP— তারিখ + সময়, টাইমজোন নেই;TIMESTAMPTZ— তারিখ + সময় + সময় অঞ্চল;INTERVAL— একটি সময়কাল (যেমন'3 days','2 hours 30 minutes')।
আমাদের ecommerce ডেটাসেটে:
| কলাম | প্রকার |
|---|---|
customers.signed_up_on | DATE |
orders.ordered_at | TIMESTAMP |
orders.shipped_at | TIMESTAMP (NULL হতে পারে) |
এক্সট্রাক্ট - একটি অংশ পড়া
EXTRACT(part FROM date) একটি সংখ্যা বের করে:
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) তারিখটিকে একটি গ্রানুলারিটিতে "কাঁটা" করে৷ এটা
মাস, সপ্তাহ, ঘন্টা অনুসারে একত্রিত করার জন্য প্রয়োজনীয়:
-- 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 উৎপন্ন হয়:
SELECT id,
shipped_at - ordered_at AS wait_time
FROM orders
WHERE shipped_at IS NOT NULL;একটি INTERVAL আক্ষরিক সাথে তুলনা:
WHERE shipped_at - ordered_at > INTERVAL '1 day'একটি তারিখে দিন যোগ করা:
SELECT signed_up_on + INTERVAL '30 days' AS trial_expiration
FROM customers;চেষ্টা করে দেখুন
প্রতি বছর কতগুলি অর্ডার দেওয়া হয়েছিল তা গণনা করুন। দুটি কলাম: বছর (পূর্ণসংখ্যা) এবং অর্ডার_কাউন্ট। ক্রমবর্ধমান বছর অনুসারে।
ইঙ্গিত দেখান
EXTRACT(YEAR FROM ordered_at) একটি সংখ্যা প্রদান করে: পঠনযোগ্যতার জন্য ::int এর সাথে int-এ কাস্ট করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
2024 সালের প্রতিটি মাসের জন্য, মাসের প্রথম দিন (কলাম মাস, প্রকারের তারিখ) এবং অর্ডারের সংখ্যা দেখান। মাস অনুযায়ী অর্ডার করুন।
ইঙ্গিত দেখান
DATE_TRUNC('month', ordered_at) টাইমস্ট্যাম্প হিসাবে মাসের প্রথম দিন ফেরত দেয়; ::তারিখ তারিখে রূপান্তরিত করে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ