16:17
MySQL - funkcje przetwarzania daty
Za pomocą pewnych wbudowanych funkcji w bardzo wygodny sposób można przetwarzać daty w bazie danych MySQL. Przedstawię tutaj kilka funkcji, które można wykorzystać do tego celu.Funkcje podstawowe
Pobieranie aktualnej daty: CURDATE(), lub CURRENT_DATE. Funkcje wypisują aktualną datę na serwerze bazy danych MySQL w formacie: RRRR-MM-DD. W przypadku użycia polecenia SELECT CURDATE(); otrzymamy datę 2006-12-13
Pobieranie aktualnego czasu: CURTIME(), lub CURRENT_TIME. Funkcja wypisuje aktualny czas na serwerze bazy danych MySQL w formacie HH:MI:SS. W przypadku użycia polecenia SELECT CURTIME(); otrzymamy czas 00:16:24
Pobieranie aktualnej daty i czasu: NOW(), SYSDATE(), lub CURRENT_TIMESTAMP. Funkcje te zwracają aktualną datę formacie: RRRR-MM-DD HH:MI:SS. W Przypadku użycia polecenia SELECT NOW(); otrzymamy 2006-12-13 00:21:49
Dodawanie interwałów do dat: DATE_ADD(data, INTERVAL jednostki). Funkcja ta dodaje do podanej daty określoną liczbę jednostek. W Przypadku użycia polecenia SELECT DATE_ADD(NOW(), INTERVAL 1 DAY); otrzymamy aktualną datę z dniem zwiększonym o 1.
Odejmowanie interwałów od dat: DATE_SUB(data, INTERVAL jednostki). Funkcja ta odejmie od podanej daty określoną liczbę jednostek. W przypadku użycia polecenia SELECT DATE_SUB(NOW(), INTERVAL 1 DAY); otrzymamy aktualną datę z dniem mniejszym o 1.
Składowe daty
Istnieje kilkanaście funkcji pozwalających pobrać określone składowe daty.
- DAYOFWEEK(data) – zwraca dzień tygodnia w postaci cyfry
- WEEKDAY(data) – zwraca dzień tygodnia w postaci cyfry (0 - Poniedziałek)
- DAYOFMONTH(data) – zwraca dzień miesiąca w postaci cyfry
- DAYOFYEAR(data) – zwraca dzień w roku w postaci cyfry
- MONTH(data) – zwraca numer miesiąca w roku
- DAYNAME(data) – zwraca pełną nazwę dnia tygodnia
- MONTHNAME(data) – zwraca pełną nazwę miesiąca
- QUARTER(data) – zwraca numer kwartału
- WEEK(data) – zwraca numer tygodnia w roku
- YEAR(data) – zwraca rok
- HOUR(data) – zwraca godzinę
- MINUTE(data) – zwraca liczbę minut
- SECOND(data) – zwraca liczbę sekund
- TO_DAYS(data) – zwraca liczbę dni, które minęły od początku naszej ery
- FROM_DAYS(dni) – zwraca datę, którą wskazuje liczba dni od początku naszej ery
Przekształcanie formatu daty
Do przekształcania formatu zwracanej przez MYSQL daty służą funkcja DATE_FORMAT(data,format). Przykład użycia: SELECT DATE_FORMAT(NOW(),'%d %M %Y'); zwróci datę w formacie 13 December 2006. Poniżej znajduje się pełna lista znaczników formatu daty dla MySQL:
- %a – zwraca skróconą nazwę dnia tygodnia
- %b – zwraca skróconą nazwę miesiąca
- %c – zwraca numer miesiąca
- %D – zwraca dzień miesiąca wraz z liczebnikiem porządkowym
- %d – zwraca dzień miesiąca w formacie dwucyfrowym
- %e – zwraca dzień miesiąca
- %f – zwraca liczbę mikrosekund
- %H – zwraca godzinę w formacie 24 godzinnym, dwucyfrowym
- %h – zwraca godzinę w formacie 12 godzinnym, dwucyfrowym
- %i – zwraca liczbę minut
- %j – zwraca numer dnia w roku w formacie trzycyfrowym
- %k – zwraca godzinę w formacie 24 godzinnym
- %l – zwraca godzinę w formacie 12 godzinnym
- %M – zwraca pełną nazwę miesiąca
- %m – zwraca numer miesiąca
- %p – zwraca AM, lub PM w zależności od pory dani
- %r – zwraca czas w formacie 12 godzinnym
- %S – zwraca liczbę sekund
- %T – zwraca czas w formacie 24 godzinnym
- %U – zwraca numer tygodnia (niedziela jest dniem pierwszym, liczone od 00)
- %u – zwraca numer tygodnia (poniedziałek jest dniem pierwszym, liczone od 00)
- %V – zwraca numer tygodnia (niedziela jest pierwszym dniem, liczone od 01)
- %v – zwraca numer tygodnia (poniedziałek jest pierwszym dniem, liczone od 01)
- %W – zwraca pełną nazwę dnia tygodnia
- %X – zwraca rok danego tygodnia (niedziela jest pierwszym dniem)
- %x – zwraca rok danego tygodnia (poniedziałek jest pierwszym dniem)
- %Y – zwraca rok w formacie czterocyfrowym
- %y – zwraca rok w formacie dwucyfrowym
Kilka przykładów zastosowania
Powyższe wywołania funkcji nie znajdą jednak większego zastosowania w operacjach na bazie danych. Najczęstsze zastosowanie mają one przy warunku WHERE. Pozwalają one precyzyjnie określić, które dane mają zostać pobrane z bazy, zaktualizowane lub usunięte. Zastosowanie również mają przy dodawaniu nowych rekordów do bazy.
Dodawanie nowych danych z aktualną datą:
INSERT INTO test.test (vol,data) VALUES('aaa',NOW());
Dodawanie nowych danych z jutrzejszą data:
INSERT INTO test.test (vol,data) VALUES('aaa',DATE_ADD(NOW(),INTERVAL 1 DAY));
Dodawanie nowych danych z datą sprzed roku:
INSERT INTO test.test (vol,data) VALUES('aaa',DATE_SUB(NOW(),INTERVAL 1 YEAR));
Pobieranie danych starszych, niż 1 rok:
SELECT * FROM test.test WHERE test.data < DATE_SUB(NOW(),INTERVAL 1 YEAR);
Pobieranie danych z przedziału jutro-wczoraj:
SELECT * FROM test.test WHERE test.data > DATE_SUB(NOW(),INTERVAL 1 DAY) AND test.data < DATE_ADD(NOW(),INTERVAL 1 DAY);
Pobieranie danych z wczorajszą datą:
SELECT * FROM test.test WHERE test.data LIKE CONCAT(DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 DAY),'%Y-%m-%d'),'%');
Wyświetlanie samej daty, bez czasu:
SELECT id, DATE_FORMAT(data,'%Y-%m-%d') as data FROM test.test;
Zwiększanie daty o 1 rok:
UPDATE test.test SET data = DATE_ADD(data, INTERVAL 1 YEAR) WHERE id='1';
Obliczanie różnicy dni między aktualną datą, a wybraną:
SELECT id,TO_DAYS(NOW()) - TO_DAYS(data) as roznica FROM test.test;
Zwracanie dnia tygodnia w postaci:
SELECT id,DAYNAME(data) as dzien_tygodnia FROM test.test;

Komentarze:
12:42
crees Bardzo ciekawe. Czesto szukalem roznych opcji jak biegac po datach w php'ie no ale teraz widze ze pomocny i to bardzo jest mysql. Thnx wielkie :*
13:24
flash
Świetnie jest to opisane !
GRATULUJE !!
21:33
matematyk
Świetnie wytłumaczone!!
Dzięki, przydało mi się ;)
13:25
pbas Prosto, zwięźle i rzeczowo. Bardzo dziękuję za ten artykuł - przydał się!
10:21
LukaszB Szacunek dla autora, najważniejsze rzeczy związane z datą zgromadzone w jednym miejscu i opisane bardzo dobrze!
Dodaj komentarz:

English
Nazywam się Tomasz Chudyk i witam na mojej stronie. Z zawodu jestem programistą. Moje zainteresowania krążą głównie wokół open-source, Linuksa i technologi internetowych.
