Jesteś tutaj: Strona główna / Wiedza / Bazy danych / MySQL: Pobranie rekordów z wybranego okresu czasu na podstawie daty

MySQL: Pobranie rekordów z wybranego okresu czasu na podstawie daty

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)

Do góry

Twój komentarz: