SQL Academy · Lekcja

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”.

Lekcja 1 z 413 kroki

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 czasu
  • TIME — pora dnia
  • TIMESTAMP — data i czas, bez strefy
  • TIMESTAMPTZ — 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-31

Odejmowanie 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-30

CURRENT_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_TIMESTAMP

Tworzenie 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?

Bezpłatny start

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

  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