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')); -- 3Dział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 ordersStrefa 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
- Arytmetyka dat i INTERVAL
- EXTRACT, DATE_TRUNC, AGE
- Strefy czasowe: TIMESTAMP a TIMESTAMPTZ
- Typowe raporty dat (MTD, WoW, YoY)