Przejdź do głównej treści
eLearner.app
Moduł 6 · Lekcja 2 z 422/57 w kursie~12 min
Lekcje modułu (2/4)

Funkcje daty i czasu (timestamp)

Daty i znaczniki czasu są wszędzie: zamówienia, loginy, wydarzenia, rozliczenia. w w tej lekcji zobaczymy, jak wyodrębnić części z daty (rok, miesiąc…), skróć to do większej szczegółowości (miesiąc, tydzień…), oblicz interwały i różnice oraz dokonywać porównań między okresami.

Typy podstawowe

PostgreSQL wyróżnia:

  • DATE — tylko data, format YYYY-MM-DD;
  • TIMESTAMP — data + godzina, bez strefy czasowej;
  • TIMESTAMPTZ — data + godzina + strefa czasowa;
  • INTERVAL – kropka (np. '3 days', '2 hours 30 minutes').

W naszym zestawie danych ecommerce:

KolumnaWpisz
KODEF0KODEF1
KODEF2KODEF3
KODEF4TIMESTAMP (może być NULL)

WYCIĄG — czytanie części

EXTRACT(part FROM date) wyodrębnia liczbę:

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;

Najczęściej używane części: YEAR, MONTH, DAY, HOUR, MINUTE, DOW (dzień tygodnia 0-6), DOY (dzień roku).

DATE_TRUNC — zaokrąglanie w dół

DATE_TRUNC('part', date) „obcina” datę do większej szczegółowości. To jest niezbędne do agregowania według miesiąca, tygodnia, godziny:

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;

Prawidłowe części: 'year', 'quarter', 'month', 'week', 'day', KODEF5, KODEF6, KODEF7.

Aby zapewnić czytelność, ludzie często rzutują na DATE, gdy nie jest potrzebny czas: KODEF1.

Różnice i interwały

Odjęcie dwóch TIMESTAMP daje INTERVAL:

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

Porównania z literałem INTERVAL:

SQL
WHERE  shipped_at - ordered_at > INTERVAL '1 day'

Dodawanie dni do daty:

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

Spróbuj

Ćwiczenie#sql.m6.l2.e1
Próby: 0Ładowanie...

Policz, ile zamówień zostało złożonych rocznie. Dwie kolumny: rok (liczba całkowita) i liczba_zamówień. Uporządkuj według roku rosnąco.

Ładowanie edytora...
Pokaż wskazówkę

WYCIĄG(ROK Z zamówionego_at) zwraca LICZBĘ: rzuć ją na int za pomocą ::int dla czytelności.

Rozwiązanie dostępne po 3 próbach

Przejrzyj ćwiczenie

Ćwiczenie#sql.m6.l2.e2
Próby: 0Ładowanie...

Dla każdego miesiąca roku 2024 wpisz pierwszy dzień miesiąca (w kolumnie miesiąc, typ data) oraz liczbę zamówień. Zamawiaj według miesiąca.

Ładowanie edytora...
Pokaż wskazówkę

DATE_TRUNC('miesiąc', zamówione_at) zwraca pierwszy dzień miesiąca jako znacznik czasu; ::date konwertuje go na datę.

Rozwiązanie dostępne po 3 próbach