główna strona
wróć
[MySQL] Jak dodać lub odjąć dni, miesiące lub lata od określonej daty?
Ostatnia zmiana: 22.11.2008, Autor artykułu: Waldemar Miotk
artykul-0017.jpg

Czasami potrzebujemy sprawdzić jaka data będzie z 5 dni, za 5 miesięcy lub za 5 lat. A może jaka data była 5 lat temu lub 2 lata i pięć miesięcy temu?  Takie dane są potrzebne aby na przykład prowadzić statystyki odwiedzania naszej strony w określonych odstępach czasowych. Możemy też potrzebować informacji o zdarzeniach występujących od daty naszego urodzenia przez 5 miesięcy. Zresztą zastosowań jest wiele. Przy pomocy MySQL jesteśmy w stanie otrzymać te wszystkie wyniki bezpośrednio w zapytaniu SQL.

MySQL jest bardzo elastyczny w rozwiązaniu tego problemu. Posiada dwie ciekawe funkcje DATE_ADD() oraz DATE_SUB().

Funkcja DATE_ADD() dodaje do określonej daty określoną liczbę jednostek:

SELECT DATE_ADD(NOW(), INTERVAL 5 DAY); # dodaje 5 dni do aktualnej daty

Funkcja DATA_SUB() odejmuje od określonej daty określoną liczbę jednostek:

SELECT DATE_SUB(NOW(), INTERVAL 5 DAY); # odejmuje 5 dni od aktualnej daty

Poniżej przedstawiam tabelkę z możliwymi do zastosowania jednostkami:

Jednostka Zapis w funkcji
YEAR_MONTH ''YY-MM''
DAY_HOUR ''DD-HH''
DAY_MINUTE ''DD HH:MI''
DAY_SECOND ''DD HH:MI:SS''
HOUR_MINUTE ''HH:MI''
HOUR_SECOND ''HH:MI:SS''
MINUTE_SECOND ''MI:SS''
DAY DD
MONTH MM
YEAR YY
HOUR HH
MINUTE MI
SECOND SS

Składnia ogólna funkcji:

  • DATE_ADD(data_początkowa, INTERVAL liczba jednostki)
  • DATE_SUB(data_początkowa, INTERVAL liczba jednostki)

Znak rozdzielający poszczególne wartości nie ma większego znaczenia, ważne tylko aby nie był cyfrą. Pokazałem to na przykładach poniżej.

Przykłady zastosowania funkcji:

SELECT DATE_ADD(NOW(), INTERVAL '5-5' YEAR_MONTH); # dodaje 5 lat i 5 miesięcy do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL '5-5' DAY_HOUR); # dodaje 5 dni i 5 godzin do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL '5 5 5' DAY_MINUTE); # dodaje 5 dni i 5 godzin i 5 minut do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL '5#5#5#5' DAY_SECOND); # dodaje 5 dni, 5 godzin, 5 minut i 5 sekund do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL '5!5' HOUR_MINUTE); # dodaje 5 godzin i 5 minut do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL '5&5&5' HOUR_SECOND); # dodaje 5 godzin, 5 minut i 5 sekund do aktualnej daty
SELECT DATE_ADD(NOW(), INTERVAL 1000 YEAR); # dodaje 1000 lat do aktualnej daty
SELECT DATE_SUB(NOW(), INTERVAL 1000 YEAR); # odejmuje 1000 lat od aktualnej daty
SELECT DATE_SUB(NOW(), INTERVAL '5!5' HOUR_MINUTE); # odejmuje 5 godzin i 5 minut od aktualnej daty
SELECT DATE_SUB(NOW(), INTERVAL '5#5#5#5' DAY_SECOND); # odejmuje 5 dni, 5 godzin, 5 minut i 5 sekund od aktualnej daty
SELECT DATE_SUB('2008-01-01', INTERVAL 5 YEAR); # odejmuje 5 lat od dnia 1 stycznia 2008 roku
SELECT DATE_SUB('2008-01-01', INTERVAL 5 HOUR); # 5 godzin od dnia 1 stycznia 2008 roku - wynik : 2007-12-31 19:00:00
SELECT DATE_ADD('2008-01-01 10', INTERVAL 5 HOUR); # dodaje 5 godzin do dnia 1 stycznia 2008 roku godziny 10:00 - wynik : 2008-01-01 15:00:00
SELECT DATE_SUB('2008-01-01 10:49:50', INTERVAL '5%5%5%5' DAY_SECOND); # odejmuje 5 dni, 5 godzin, 5 minut i 5 sekund do dnia 1 stycznia 2008 roku godziny 10:49 i 50 sekund - wynik : 2007-12-27 05:44:45
SELECT DATE_ADD( datawtabeli, INTERVAL 5 DAY ) FROM tabela; # wyświetla wszystkie pola datawtabeli zwiększone o 5 dni

 
Komentarze(0)

Podpis:
W celu potwierdzenia, zaznacz pole pod znakiem: 2
Capcha
(c)2007-2016 Waldemar Miotk - ostatnia aktualizacja silnika 06.02.2016 - Twój IP: 54.144.24.41. Ta strona, aby lepiej działać, używa plików cookie przechowywanych na komputerach użytkowników. Wszystkie prawa do tekstów zamieszczonych na stronie są zastrzeżone, chyba że przy konkretnym tekście znajduje się inna informacja.
go up