Strona testowana na następujących przeglądarkach internetowych
Mozilla Firefox 3.6.3
,
Google Chrome 3.0,
Internet Explorer 8.0

Gościmy

Naszą witrynę przegląda teraz 18 gości 

Jak dodać lub odjąć dni miesiące lub lata od określonej daty?
(6 głosów, średnia ocena 4.33 na 5)
Baza danych MySQL
sobota, 22 listopada 2008 21:20

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ć statysktyki 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 DAT); # 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  

#3 spider
mi też się przydało, dzięki.
| Cytować
#2 htk
gdybyśmy się znali, to bym Ci realnego postawił : D
| Cytować
#1 wiko
Dzięki :-) Wirtualny browar
| Cytować

Dodaj komentarz