مرکزی مواد پر جائیں
ماڈیول 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 کوششوں کے بعد حل دستیاب ہے۔