zadanie150

MySQL
Priorytet: Normalny Szkic

Zadanie 150: Praca z datami i czasem w MySQL

Wstęp

W bazach danych przechowywanie i manipulowanie czasem jest kluczowe dla systemów zamówień, logowania zdarzeń czy planowania zadań. MySQL oferuje dedykowane typy danych oraz bogaty zestaw funkcji do pracy z datami.

Podstawowe typy danych:

  • DATE: Format RRRR-MM-DD (np. 2024-03-17).
  • DATETIME: Format RRRR-MM-DD GG:MM:SS (np. 2024-03-17 14:30:00).
  • TIMESTAMP: Podobnie jak DATETIME, ale przechowuje czas UTC i automatycznie aktualizuje się przy zmianie rekordu.
  • TIME: Tylko godzina GG:MM:SS.
  • YEAR: Rok w formacie 4-cyfrowym.

Kluczowe funkcje daty i czasu

1. Pobieranie aktualnego czasu

  • NOW(): Zwraca bieżącą datę i godzinę.
  • CURDATE(): Zwraca bieżącą datę.
  • CURTIME(): Zwraca bieżącą godzinę.

2. Wyciąganie fragmentów daty

  • YEAR(data), MONTH(data), DAY(data): Wyciąga odpowiednio rok, miesiąc lub dzień.
  • WEEKDAY(data): Zwraca dzień tygodnia (0 = poniedziałek, 6 = niedziela).

3. Obliczenia na datach

  • DATEDIFF(data1, data2): Zwraca różnicę w dniach między dwiema datami.
  • DATE_ADD(data, INTERVAL 1 DAY): Dodaje określony interwał do daty.
  • DATE_SUB(data, INTERVAL 1 MONTH): Odejmuje interwał od daty.

4. Formatowanie

  • DATE_FORMAT(data, '%d-%m-%Y'): Wyświetla datę w określonym formacie (np. 17-03-2024).

Przygotowanie środowiska

Utwórz tabelę Wydarzenia, która posłuży do testów:

CREATE TABLE Wydarzenia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nazwa VARCHAR(100),
    data_start DATETIME,
    data_koniec DATETIME
);

INSERT INTO Wydarzenia (nazwa, data_start, data_koniec) VALUES 
('Konferencja IT', '2024-05-10 09:00:00', '2024-05-12 17:00:00'),
('Warsztaty SQL', '2024-06-15 10:00:00', '2024-06-15 16:00:00'),
('Hackathon', '2024-07-20 08:00:00', '2024-07-21 20:00:00');

Zadania do samodzielnego wykonania

Poniżej znajduje się 10 zadań sprawdzających Twoją wiedzę. Napisz zapytania SQL, które zrealizują poniższe cele:

  1. Zadanie 1: Wyświetl aktualną datę i godzinę systemową, nadając kolumnie alias Teraz.
  2. Zadanie 2: Wyświetl nazwy wszystkich wydarzeń wraz z rokiem, w którym się odbywają.
  3. Zadanie 3: Oblicz, ile dni trwa każde wydarzenie (różnica między data_koniec a data_start).
  4. Zadanie 4: Wyświetl wydarzenia, które zaczynają się w weekend (sobota lub niedziela). Skorzystaj z funkcji WEEKDAY().
  5. Zadanie 5: Sformatuj datę rozpoczęcia wydarzeń tak, aby wyświetlała się w formacie: Dzień.Miesiąc.Rok (np. 10.05.2024).
  6. Zadanie 6: Dodaj do tabeli nowe wydarzenie pt. 'Spotkanie online', które odbędzie się za dokładnie 14 dni od momentu wykonania zapytania (NOW()).
  7. Zadanie 7: Wyświetl wszystkie wydarzenia, które odbywają się w czerwcu (niezależnie od roku).
  8. Zadanie 8: Znajdź wydarzenie, do którego rozpoczęcia zostało najmniej czasu od dzisiaj (użyj WHERE data_start > NOW()).
  9. Zadanie 9: Wyświetl listę wydarzeń wraz z informacją, ile pełnych godzin trwa każde z nich (użyj funkcji TIMESTAMPDIFF).
  10. Zadanie 10: Stwórz widok (VIEW) o nazwie RaportMiesieczny, który grupuje wydarzenia według miesiąca rozpoczęcia i podaje ich liczbę w każdym miesiącu.