[MySQL] Jak dodać lub odjąć dni, miesiące lub lata od określonej daty?
Ostatnia zmiana: 22.11.2008, Autor artykułu: Waldemar Miotk
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(1)
Dominik Nowicki - IP: xx.xxx.122.190, Data: 07.05.2019 13:01:13
Chujowy ten poradnik