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: FormatRRRR-MM-DD(np.2024-03-17).DATETIME: FormatRRRR-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 godzinaGG: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:
- Zadanie 1: Wyświetl aktualną datę i godzinę systemową, nadając kolumnie alias
Teraz. - Zadanie 2: Wyświetl nazwy wszystkich wydarzeń wraz z rokiem, w którym się odbywają.
- Zadanie 3: Oblicz, ile dni trwa każde wydarzenie (różnica między
data_koniecadata_start). - Zadanie 4: Wyświetl wydarzenia, które zaczynają się w weekend (sobota lub niedziela). Skorzystaj z funkcji
WEEKDAY(). - Zadanie 5: Sformatuj datę rozpoczęcia wydarzeń tak, aby wyświetlała się w formacie:
Dzień.Miesiąc.Rok(np.10.05.2024). - 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()). - Zadanie 7: Wyświetl wszystkie wydarzenia, które odbywają się w czerwcu (niezależnie od roku).
- Zadanie 8: Znajdź wydarzenie, do którego rozpoczęcia zostało najmniej czasu od dzisiaj (użyj
WHERE data_start > NOW()). - Zadanie 9: Wyświetl listę wydarzeń wraz z informacją, ile pełnych godzin trwa każde z nich (użyj funkcji
TIMESTAMPDIFF). - 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.
�