CodeGym /Kursy /SQL SELF /Typy danych do pracy z datą i czasem: DATE,...

Typy danych do pracy z datą i czasem: DATE, TIME, TIMESTAMP

SQL SELF
Poziom 15, Lekcja 4
Dostępny

Jak często spotykasz aplikacje, które pracują z datami i czasem? Zamówienia online, rozkłady, historia zmian w bazie danych — wszystko to zależy od poprawnego przechowywania czasu. PostgreSQL daje mega narzędzia do pracy z takimi danymi i oczywiście tabele z czasem to nie są straszne tabelki z zegarkami, tylko konkretna struktura, która pozwala analizować i porządkować zdarzenia.

Typy do daty i czasu pozwalają na:

  • Przechowywanie tylko daty DATE, tylko czasu TIME albo obu naraz TIMESTAMP.
  • Robienie operacji, takich jak dodawanie dni, liczenie różnicy między datami i filtrowanie rekordów po kryteriach czasowych.
  • Obsługę stref czasowych (ale to temat na przyszłe wykłady).

Typy danych: DATE, TIME, TIMESTAMP

Typ danych DATE

Typ DATE jest do przechowywania tylko daty, bez czasu. Zapisuje rok, miesiąc i dzień. Ten typ jest spoko, gdy:

  • Trzeba zapisać datę urodzin użytkownika.
  • Data zdarzenia jest ważna, ale godzina już nie.

Przykładowy format: YYYY-MM-DD (rok-miesiąc-dzień).

Przykład:

id name - VARCHAR(100) event_date - DATE
1 SQL Workshop 2025-06-15
2 Python 2025-06-17
3 Java Courses 2025-06-25

Typ danych TIME

Typ TIME jest do przechowywania tylko czasu. Przydaje się, gdy:

  • Trzeba zapisać rozkład, np. początek dnia pracy.
  • Czas ma znaczenie, ale data już nie.

Przykładowy format: HH:MI:SS (godziny:minuty:sekundy).

Przykład:

id task_name - VARCHAR(100) start_time - TIME
1 Team Meeting 09:00:00
2 Code Review 11:30:00
3 Client Call 15:00:00

Typ danych TIMESTAMP

TIMESTAMP — to połączenie daty i czasu. Przydaje się, gdy:

  • Trzeba zapisać moment, np. kiedy użytkownik się zalogował.
  • Potrzebny jest znacznik czasu do śledzenia zmian (logowanie).

Przykładowy format: YYYY-MM-DD HH:MI:SS (rok-miesiąc-dzień godziny:minuty:sekundy).

Przykład:

id action - VARCHAR(100) login_time - TIMESTAMP
1 User Login 2023-10-15 14:30:00
2 File Uploaded 2023-10-15 15:10:00
3 User Logout 2023-10-15 16:45:00

Operacje na dacie i czasie

Teraz, gdy już wiemy jakie są typy, zobaczmy jak z nich korzystać. PostgreSQL ma mnóstwo wbudowanych funkcji do operacji na datach i czasie.

Wyciąganie części daty i czasu

Jeśli masz znacznik czasu (TIMESTAMP) i chcesz wyciągnąć tylko rok, miesiąc, dzień albo godzinę, użyj funkcji EXTRACT.

Przykład:

SELECT EXTRACT(YEAR FROM TIMESTAMP '2025-06-15 14:30:00') AS rok;
-- Wynik: 2025

SELECT EXTRACT(MONTH FROM TIMESTAMP '2025-06-15 14:30:00') AS miesiac;
-- Wynik: 06

SELECT EXTRACT(DAY FROM TIMESTAMP '2025-06-15 14:30:00') AS dzien;
-- Wynik: 15

Dodawanie i odejmowanie przedziałów czasowych

Chcesz wiedzieć, co będzie za tydzień? Albo co było wczoraj? Skorzystaj z operacji na przedziałach czasowych.

Przykład:

-- Dodanie 7 dni do bieżącej daty
SELECT CURRENT_DATE + INTERVAL '7 days' AS nastepny_tydzien;

-- Odjęcie 1 miesiąca
SELECT CURRENT_DATE - INTERVAL '1 month' AS poprzedni_miesiac;

Porównywanie dat

Jak sprawdzić, czy wydarzenie już było? Prościej niż znaleźć buga w kodzie — po prostu porównaj wartości.

Przykład:

SELECT event_date
FROM events
WHERE event_date < CURRENT_DATE;
-- Wybieramy wszystkie wydarzenia z przeszłości

Więcej o funkcjach do pracy z czasem i datą dowiesz się na kolejnych wykładach. Na razie po prostu zapamiętaj, że takie typy istnieją — to wystarczy.

Problemy stref czasowych i standard czasu

Chociaż w tym wykładzie jeszcze nie będziemy wchodzić w szczegóły stref czasowych, warto wspomnieć, że PostgreSQL obsługuje typ TIMESTAMPTZ (znacznik czasu ze strefą czasową). Na przykład, 2023-10-15 14:30:00+02 pokazuje, że ten czas jest w strefie UTC+2.

Na pewno omówimy ten temat na naszym kursie, tylko trochę później :P

Przykład

Teraz czas sprawdzić w praktyce nasze świeżo zdobyte skille. Stwórzmy tabelę, która będzie przechowywać rozkład zajęć studentów.

id subject_name class_date - DATE start_time - TIME end_time - TIME created_at - TIMESTAMP
1 Mathematics 2023-10-16 09:00:00 10:30:00 2023-10-12 14:00:00
2 Physics 2023-10-16 11:00:00 12:30:00 2023-10-12 14:00:00
3 Chemistry 2023-10-17 09:00:00 10:30:00 2023-10-12 14:01:00
4 Literature 2023-10-17 11:00:00 12:30:00 2023-10-12 14:01:00
5 Computer Science 2023-10-18 10:00:00 11:30:00 2023-10-12 14:02:00

Za kilka wykładów będziesz tworzyć takie tabele w bazie za pomocą zapytań SQL. Na razie po prostu podziwiamy :)

Typowe błędy

Format daty i czasu: przy wstawianiu danych ważne jest trzymanie się poprawnego formatu: YYYY-MM-DD dla dat i HH:MI:SS dla czasu. PostgreSQL może się pogubić, jeśli spróbujesz wstawić datę jako "15/10/2023".

Niezgodność typów danych: próba zapisania wartości tekstowej do pola typu DATE skończy się błędem.

Błędy przedziałów czasowych: jeśli dodasz np. 30 dni do lutego, PostgreSQL ogarnie to poprawnie, ale data może już być w marcu.

Teraz już znasz typy danych do pracy z datą i czasem w PostgreSQL. W prawdziwych projektach to pomaga ogarniać rozkłady, logować zdarzenia albo śledzić ważne akcje w systemie!

2
Zadanie
SQL SELF, poziom 15, lekcja 4
Niedostępne
Wyodrębnianie części czasu z TIMESTAMP
Wyodrębnianie części czasu z TIMESTAMP
2
Zadanie
SQL SELF, poziom 15, lekcja 4
Niedostępne
Tworzenie harmonogramu spotkań
Tworzenie harmonogramu spotkań
1
Ankieta/quiz
Typy danych liczbowych, poziom 15, lekcja 4
Niedostępny
Typy danych liczbowych
Typy danych liczbowych
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION