0Pricing
SQL Academy · Lekcja

EXTRACT, DATE_TRUNC, AGE

Wyodrębniaj części dat za pomocą EXTRACT, zaokrąglaj znaczniki czasu do granicy przy użyciu DATE_TRUNC i obliczaj czytelne dla człowieka różnice za pomocą AGE.

EXTRACT, DATE_TRUNC, AGE to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

EXTRACT: pobieranie części daty

EXTRACT(part FROM ts) zwraca pojedynczy składnik liczbowy:

SELECT EXTRACT(YEAR  FROM created_at) AS yr,
       EXTRACT(MONTH FROM created_at) AS mo,
       EXTRACT(DAY   FROM created_at) AS d,
       EXTRACT(DOW   FROM created_at) AS day_of_week
FROM orders;

Częste części EXTRACT

Przydatne części: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DOW (0=Sun), DOY (1–366), WEEK, QUARTER, EPOCH.

SELECT EXTRACT(EPOCH FROM (NOW() - created_at)) AS seconds_ago
FROM events;

DATE_TRUNC: zaokrąglanie do granicy

DATE_TRUNC(unit, ts) zeruje wszystkie składniki poniżej podanej jednostki — to najbardziej użyteczna funkcja w raportach grupowanych przedziałami:

SELECT date_trunc('day',   NOW());   -- 2024-03-15 00:00:00
SELECT date_trunc('week',  NOW());
SELECT date_trunc('month', NOW());
SELECT date_trunc('hour',  NOW());

Raporty grupowane przedziałami

Miesięczny przychód z użyciem date_trunc:

SELECT date_trunc('month', created_at) AS month,
       SUM(total) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;

Od początku roku / od początku miesiąca

Porównanie bieżącego okresu z tym samym momentem w ubiegłym roku:

-- This month so far
SELECT SUM(total) FROM orders
WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

AGE: różnica uwzględniająca kalendarz

AGE zwraca lata, miesiące i dni, a nie tylko liczbę dni:

SELECT AGE('2024-03-15', '2020-12-01');
-- → '3 years 3 months 14 days'

SELECT EXTRACT(YEAR FROM AGE('2024-03-15', '2020-12-01'));  -- 3

Działanie dwuargumentowej funkcji AGE

Jednoargumentowa funkcja AGE porównuje wartość z current_date:

SELECT AGE(birth_date) FROM users LIMIT 5;

Logika dni tygodnia

EXTRACT(DOW): 0=niedziela … 6=sobota. ISO_DOW: 1=poniedziałek … 7=niedziela.

SELECT * FROM orders
WHERE EXTRACT(ISODOW FROM created_at) IN (6, 7);  -- weekend orders

Strefa czasowa w EXTRACT

EXTRACT dla typu TIMESTAMPTZ używa strefy czasowej sesji. Użyj AT TIME ZONE, aby nią sterować:

SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'UTC') FROM events;
SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'Europe/Berlin') FROM events;

Obcinanie według niestandardowego przedziału

W przypadku przedziałów niezwiązanych z kalendarzem (na przykład co 5 minut) należy użyć arytmetyki:

SELECT to_timestamp(
  floor(EXTRACT(EPOCH FROM created_at) / 300) * 300
) AS bucket_5min,
COUNT(*)
FROM events
GROUP BY 1
ORDER BY 1;

Indeksy funkcyjne do obcinania

Jeśli często używasz date_trunc('day', created_at) w klauzuli GROUP BY, pomocny będzie indeks funkcyjny:

CREATE INDEX events_day_idx ON events ((date_trunc('day', created_at)));

Podsumowanie

EXTRACT + DATE_TRUNC + AGE pokrywają większość potrzeb związanych z raportowaniem.

  • EXTRACT do pobierania poszczególnych części
  • DATE_TRUNC do zaokrąglania do granicy
  • AGE do określania okresów uwzględniających kalendarz

Szybki test

Chcesz uzyskać miesięczną liczbę nowych użytkowników. Która funkcja grupuje daty według miesięcy?

Często zadawane pytania

Czy lekcja „EXTRACT, DATE_TRUNC, AGE” jest bezpłatna?

Tak — pełny tekst „EXTRACT, DATE_TRUNC, AGE” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „EXTRACT, DATE_TRUNC, AGE”?

Wyodrębniaj części dat za pomocą EXTRACT, zaokrąglaj znaczniki czasu do granicy przy użyciu DATE_TRUNC i obliczaj czytelne dla człowieka różnice za pomocą AGE. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „EXTRACT, DATE_TRUNC, AGE”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Arytmetyka dat i INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Strefy czasowe: TIMESTAMP a TIMESTAMPTZ
  4. Typowe raporty dat (MTD, WoW, YoY)
← Powrót do SQL Academy