Załóżmy, że w bazie danych przechowujemy informacje o dniach w których hipotetyczny pracownik firmy brał urlop. Kolumna "nieobecnosc" zawiera datę w jednym z formatów przyjętych przez MySQL. Jak spośród setek wierszy (gdzie każdy określa jeden dzień) wybrać wszystkie z konkretnego miesiąca? Posłużymy się wbudowanymi w MySQL funkcjami daty i czasu. Proste zapytanie przedstawiono poniżej.
Nasz format daty to: 'yyyy-MM-dd HH:mm:ss'. Pobierzmy wszystkie dni z urlopem Jana Kowalskiego od początku jego zatrudnienia w firmie.
Wydajemy zapytanie do bazy:
select imie, nazwisko, nieobecnosc
from urlopy
where imie = 'Jan' and
nazwisko = 'Kowalski';
W efekcie kwerenda wyświetli wszystkie wiersze dotyczące pracownika.
+------+----------+---------------------+ | imie | nazwisko | nieobecnosc | +------+----------+---------------------+ | Jan | Kowalski | 2010-07-28 00:00:00 | | Jan | Kowalski | 2010-08-09 00:00:00 | | Jan | Kowalski | 2010-08-10 00:00:00 | | Jan | Kowalski | 2010-08-19 00:00:00 | | Jan | Kowalski | 2010-09-06 00:00:00 | | Jan | Kowalski | 2010-09-07 00:00:00 | | Jan | Kowalski | 2010-09-08 00:00:00 | +------+----------+---------------------+ 7 rows in set (0.00 sec)
To oczywiście przykład. Dane powinniśmy pobrać wg. odmiennych kryteriów (np. identyfikatora pracownika a nie nazwiska) ale tutaj chcemy pokazać coś innego.
Aby pobrać wszystkie nieobecności pracownika w miesiącu sierpniu i roku 2010 wystarczy lekko zmodyfikować kwerendę:
select imie, nazwisko, nieobecnosc
from urlopy
where imie = 'Jan' and
nazwisko = 'Kowalski' and
and ( year(nieobecnosc) = 2010 and month(nieobecnosc) = 8 );
Jak widać funkcja year oraz month automatycznie wyłuska rok i miesiąc ze znacznika czasu zawartego w kolumnie "nieobecnosc". W efekcie otrzymamy tylko trzy wyniki z sierpnia:
+------+----------+---------------------+ | imie | nazwisko | nieobecnosc | +------+----------+---------------------+ | Jan | Kowalski | 2010-08-09 00:00:00 | | Jan | Kowalski | 2010-08-10 00:00:00 | | Jan | Kowalski | 2010-08-19 00:00:00 | +------+----------+---------------------+ 3 rows in set (0.00 sec)