Risposte:
Che dire della funzione DATEDIFF ?
Citando la pagina del manuale:
DATEDIFF () restituisce expr1 - expr2 espresso come valore in giorni da una data all'altra. expr1 ed expr2 sono espressioni di data o data e ora. Nel calcolo vengono utilizzate solo le parti della data dei valori
Nel tuo caso, useresti:
mysql> select datediff('2010-04-15', '2010-04-12');
+--------------------------------------+
| datediff('2010-04-15', '2010-04-12') |
+--------------------------------------+
| 3 |
+--------------------------------------+
1 row in set (0,00 sec)
Ma nota che le date dovrebbero essere scritte come YYYY-MM-DD
e non DD-MM-YYYY
come quelle che hai pubblicato.
datediff()
metodo, altrimenti restituirà un valore negativo.
Nota se vuoi contare FULL 24h giorni tra 2 date, dateiff può restituire valori errati per te.
Come indica la documentazione:
Nel calcolo vengono utilizzate solo le parti della data dei valori.
che risulta in
select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')
restituisce 1 invece di 0 previsto.
La soluzione sta usando select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
(notare l'ordine degli argomenti opposto rispetto a datiff).
Qualche esempio:
select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00');
restituisce 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
ritorna 1select timestampdiff(DAY, '2016-04-13 11:00:00', now());
restituisce il numero di 24 ore intere trascorse dal 13/04/2016 alle 11:00:00 fino ad ora .Spero che possa aiutare qualcuno, perché all'inizio non è molto ovvio il motivo per cui datiff restituisca valori che sembrano inaspettati o sbagliati.
datediff()
e timestampdiff()
.
Usa la DATEDIFF()
funzione
Esempio dalla documentazione:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Preferisco TIMESTAMPDIFF perché è possibile cambiare facilmente l'unità, se necessario.
Ottieni giorni tra la data corrente e la data di destinazione
SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;
produzione
335
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM membership_dates md
produzione::
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
spero che aiuti qualcuno in futuro