[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(3)
XD - IP: xxx.xxx.240.32, Data: 03.02.2021 08:47:15
XD
Eric Jones - IP: xxx.xxx.14.115, Data: 04.11.2020 08:56:33
Cool website!
My name’s Eric, and I just found your site - miotk.eu - while surfing the net. You showed up at the top of the search results, so I checked you out. Looks like what you’re doing is pretty cool.
But if you don’t mind me asking – after someone like me stumbles across miotk.eu, what usually happens?
Is your site generating leads for your business?
I’m guessing some, but I also bet you’d like more… studies show that 7 out 10 who land on a site wind up leaving without a trace.
Not good.
Here’s a thought – what if there was an easy way for every visitor to “raise their hand” to get a phone call from you INSTANTLY… the second they hit your site and said, “call me now.”
You can –
Talk With Web Visitor is a software widget that’s works on your site, ready to capture any visitor’s Name, Email address and Phone Number. It lets you know IMMEDIATELY – so that you can talk to that lead while they’re literally looking over your site.
CLICK HERE http://www.talkwithcustomer.com to try out a Live Demo with Talk With Web Visitor now to see exactly how it works.
Time is money when it comes to connecting with leads – the difference between contacting someone within 5 minutes versus 30 minutes later can be huge – like 100 times better!
That’s why we built out our new SMS Text With Lead feature… because once you’ve captured the visitor’s phone number, you can automatically start a text message (SMS) conversation.
Think about the possibilities – even if you don’t close a deal then and there, you can follow up with text messages for new offers, content links, even just “how you doing?” notes to build a relationship.
Wouldn’t that be cool?
CLICK HERE http://www.talkwithcustomer.com to discover what Talk With Web Visitor can do for your business.
You could be converting up to 100X more leads today!
Eric
PS: Talk With Web Visitor offers a FREE 14 days trial – and it even includes International Long Distance Calling.
You have customers waiting to talk with you right now… don’t keep them waiting.
CLICK HERE http://www.talkwithcustomer.com to try Talk With Web Visitor now.
If you'd like to unsubscribe click here http://talkwithcustomer.com/unsubscribe.aspx?d=miotk.eu
Dominik Nowicki - IP: xx.xxx.122.190, Data: 07.05.2019 13:01:13
Chujowy ten poradnik