Odpowiedzi:
A co z funkcją DATEDIFF ?
Cytując stronę podręcznika:
DATEDIFF () zwraca wyrażenie1 - wyrażenie2 wyrażone jako wartość w dniach od jednej daty do drugiej. wyrażenie1 i wyrażenie2 są wyrażeniami typu data lub data i czas. W obliczeniach używane są tylko części wartości dotyczące daty
W twoim przypadku użyłbyś:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Ale pamiętaj, że daty powinny być zapisane jako YYYY-MM-DD
, a nie DD-MM-YYYY
tak, jak opublikowałeś.
datediff()
metody, w przeciwnym razie zwróci wartość ujemną.
Zwróć uwagę, że jeśli chcesz liczyć PEŁNE 24-godzinne dni między dwiema datami, datediff może zwrócić nieprawidłowe wartości.
Jak stwierdza dokumentacja:
W obliczeniach używane są tylko części wartości dotyczące daty.
Co skutkuje w
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
zwraca 1 zamiast oczekiwanego 0.
Rozwiązanie używa select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(zwróć uwagę na odwrotną kolejność argumentów w porównaniu z datediff).
Kilka przykładów:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
zwraca 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
zwraca 1select timestampdiff(DAY, '2016-04-13 11:00:00', now());
zwraca ile pełnych 24-godzinnych dni minęło od 13.04.2016 od 11:00:00 do teraz .Mam nadzieję, że to komuś pomoże, ponieważ na początku nie jest zbyt oczywiste, dlaczego datediff zwraca wartości, które wydają się nieoczekiwane lub błędne.
datediff()
a timestampdiff()
.
Użyj DATEDIFF()
funkcji.
Przykład z dokumentacji:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Wolę TIMESTAMPDIFF, ponieważ w razie potrzeby możesz łatwo zmienić jednostkę.
Uzyskaj dni między bieżącą datą a datą docelową
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
wynik
335
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
wynik::
id entity_id start_date end_date days
1 1236 2018-01-16 00:00:00 2018-08-31 00:00:00 227
2 2876 2015-06-26 00:00:00 2019-06-30 00:00:00 1465
3 3880 1990-06-05 00:00:00 2018-07-04 00:00:00 10256
4 3882 1993-07-05 00:00:00 2018-07-04 00:00:00 9130
mam nadzieję, że pomoże to komuś w przyszłości