Arytmetyka dat i INTERVAL
Dodawaj i odejmuj daty za pomocą INTERVAL, obliczaj czas trwania i twórz względne filtry dat, takie jak „ostatnie 7 dni”.
Arytmetyka dat i INTERVAL to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 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.
Podsumowanie typów daty i czasu
Cztery podstawowe typy temporalne w PostgreSQL:
DATE— dzień kalendarzowy, bez czasuTIME— pora dniaTIMESTAMP— data i czas, bez strefyTIMESTAMPTZ— data, czas i strefa (zalecany dla zdarzeń)
INTERVAL: odcinek czasu
INTERVAL oznacza czas trwania. Można go dodać do daty lub znacznika czasu albo od niego odjąć:
SELECT NOW() + INTERVAL '1 day';
SELECT NOW() - INTERVAL '30 days';
SELECT NOW() + INTERVAL '3 months 2 weeks';
SELECT INTERVAL '1 hour' + INTERVAL '15 minutes';Jednostki INTERVAL
Można używać jednostek year, month, week, day, hour, minute, second (w liczbie pojedynczej lub mnogiej):
SELECT INTERVAL '2 years 6 months';
SELECT INTERVAL '1 week';
SELECT INTERVAL '90 seconds';Częste filtry dat względnych
Podstawowe zapytania typu „ostatnie N dni”:
SELECT * FROM orders
WHERE created_at >= NOW() - INTERVAL '7 days';
SELECT * FROM events
WHERE created_at >= CURRENT_DATE - INTERVAL '1 month';Dodawanie dni do typu DATE
PostgreSQL pozwala również używać wyrażenia date + integer jako operacji „dodaj N dni”:
SELECT DATE '2024-01-01' + 30; -- 2024-01-31
SELECT DATE '2024-01-01' - 1; -- 2023-12-31Odejmowanie dwóch znaczników czasu
Różnica dwóch znaczników czasu jest wartością typu INTERVAL:
SELECT NOW() - '2024-01-01'::TIMESTAMP;
-- → '125 days 14:30:00'
SELECT EXTRACT(EPOCH FROM (NOW() - created_at))/3600 AS hours_ago
FROM events;AGE: różnica czytelna dla człowieka
AGE(end, start) zwraca wartość INTERVAL wyrażoną w latach, miesiącach i dniach:
SELECT AGE(NOW(), birth_date) AS age_interval
FROM users WHERE id = 1;
SELECT EXTRACT(YEAR FROM AGE(birth_date)) AS age_in_years
FROM users;Dodawanie miesięcy — uwaga
Dodawanie miesiąca jest operacją kalendarzową. 2024-01-31 + 1 month = 2024-02-29 (data zostaje ograniczona do końca miesiąca):
SELECT DATE '2024-01-31' + INTERVAL '1 month'; -- 2024-02-29
SELECT DATE '2024-03-31' + INTERVAL '1 month'; -- 2024-04-30CURRENT_DATE a NOW()
Zwracają różne typy — proszę wybrać ten, który najlepiej pasuje:
SELECT CURRENT_DATE; -- 2024-03-15 (DATE)
SELECT CURRENT_TIME; -- 14:30:00+02 (TIMETZ)
SELECT CURRENT_TIMESTAMP; -- 2024-03-15 14:30:00+02 (TIMESTAMPTZ)
SELECT NOW(); -- alias for CURRENT_TIMESTAMPTworzenie dat z części
Daty można tworzyć z kolumn przechowujących liczby całkowite:
SELECT MAKE_DATE(year, month, day) FROM birthdays;
SELECT MAKE_TIMESTAMP(2024, 3, 15, 14, 30, 0.0);Indeksy na wyrażeniach daty
Indeks na kolumnie created_at dobrze obsługuje zapytania zakresowe. W przypadku „zdarzeń w marcu” filtr zakresowy jest szybszy niż month-trunc:
-- Index-friendly:
WHERE created_at >= '2024-03-01' AND created_at < '2024-04-01';
-- Less friendly (works only with expression index):
WHERE date_trunc('month', created_at) = '2024-03-01';Podsumowanie
Arytmetyka dat w SQL jest rozbudowana i niezawodna.
- INTERVAL do określania czasu trwania
- Bezpośrednie dodawanie i odejmowanie
- AGE do określania okresów w sposób czytelny dla człowieka
- Przedziały lewostronnie domknięte i prawostronnie otwarte są najkorzystniejsze dla indeksów
Szybki test
Które wyrażenie zwraca zdarzenia z ostatnich 7 dni?
Ucz się SQL dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 46
- Lekcje
- 183
Często zadawane pytania
Czy lekcja „Arytmetyka dat i INTERVAL” jest bezpłatna?
Tak — pełny tekst „Arytmetyka dat i INTERVAL” 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 „Arytmetyka dat i INTERVAL”?
Dodawaj i odejmuj daty za pomocą INTERVAL, obliczaj czas trwania i twórz względne filtry dat, takie jak „ostatnie 7 dni”. Ć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 1 z 4.
Ile czasu zajmuje lekcja „Arytmetyka dat i INTERVAL”?
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)