Modül dersleri (2/4)
Tarih ve zaman damgası işlevleri
Tarihler ve zaman damgaları her yerdedir: siparişler, oturum açma bilgileri, etkinlikler, faturalandırma. içinde Bu derste bir tarihten (yıl, ay…) parçaların nasıl çıkarılacağını göreceğiz, bölün bir ayrıntı düzeyine (ay, hafta…) bölün, aralıklarla hesaplayın ve farklılıkları inceleyip dönemler arasında karşılaştırmalar yapabilirsiniz.
Temel türleri
PostgreSQL şunları ayırt eder:
DATE— yalnızca tarih, biçimYYYY-MM-DD;TIMESTAMP— tarih + saat, saat dilimi yok;TIMESTAMPTZ— tarih + saat + saat dilimi;INTERVAL— bir nokta (ör.'3 days','2 hours 30 minutes').
ecommerce veri kümemizde:
| Sütun | Tür |
|---|---|
customers.signed_up_on | DATE |
orders.ordered_at | TIMESTAMP |
orders.shipped_at | TIMESTAMP (NULL olabilir) |
EXTRACT — bir bölümü okumak
EXTRACT(part FROM date) bir sayı çıkarır:
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;En çok kullanılan parçalar: YEAR, MONTH, DAY, HOUR, MINUTE, DOW (gün)
0-6. hafta), DOY (yılın günü).
DATE_TRUNC — aşağı yuvarlama
DATE_TRUNC('part', date) tarihi ayrıntı düzeyine göre "keser". öyle
Ay, hafta ve saate göre toplama için gerekli:
-- 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;Geçerli parçalar: 'year', 'quarter', 'month', 'week', 'day',
'hour', 'minute', 'second'.
Okunabilirlik açısından, insanlar genellikle zamana gerek olmadığında DATE'ye yayın yapar:
DATE_TRUNC('month', ordered_at)::date.
Farklılıklar ve aralıklar
İki TIMESTAMP'nin çıkarılması bir INTERVAL üretir:
SELECT id,
shipped_at - ordered_at AS wait_time
FROM orders
WHERE shipped_at IS NOT NULL;INTERVAL değişmez değeriyle karşılaştırmalar:
WHERE shipped_at - ordered_at > INTERVAL '1 day'Bir tarihe gün ekleme:
SELECT signed_up_on + INTERVAL '30 days' AS trial_expiration
FROM customers;Deneyin
Yılda kaç sipariş verildiğini sayın. İki sütun: yıl (tamsayı) ve order_count. Yıllara göre artan şekilde sıralayın.
İpucu göster
EXTRACT(YEAR FROM order_at) bir NUMERIC döndürür: okunabilirlik için onu ::int ile int'ye aktarın.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
2024'ün her ayı için ayın ilk gününü (ay sütunu, tarih türü) ve sipariş sayısını gösterin. Aya göre sipariş verin.
İpucu göster
DATE_TRUNC('month',order_at) ayın ilk gününü zaman damgası olarak döndürür; ::date onu tarihe dönüştürür.
3 denemeden sonra çözüm mevcut