মূল কন্টেন্টে যান
মডিউল 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লোড হচ্ছে...

প্রতি বছর কতগুলি অর্ডার দেওয়া হয়েছিল তা গণনা করুন। দুটি কলাম: বছর (পূর্ণসংখ্যা) এবং অর্ডার_কাউন্ট। ক্রমবর্ধমান বছর অনুসারে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

EXTRACT(YEAR FROM ordered_at) একটি সংখ্যা প্রদান করে: পঠনযোগ্যতার জন্য ::int এর সাথে int-এ কাস্ট করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#sql.m6.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

2024 সালের প্রতিটি মাসের জন্য, মাসের প্রথম দিন (কলাম মাস, প্রকারের তারিখ) এবং অর্ডারের সংখ্যা দেখান। মাস অনুযায়ী অর্ডার করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

DATE_TRUNC('month', ordered_at) টাইমস্ট্যাম্প হিসাবে মাসের প্রথম দিন ফেরত দেয়; ::তারিখ তারিখে রূপান্তরিত করে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ