Come ottenere il numero di giorni di differenza tra due date su mysql?

Ho bisogno di ottenere il numero di giorni contenuti in un paio di date su mysql.

Ad esempio: Data di arrivo 12-04-2010 Data di partenza 15-04-2010 e la differenza di giorno sarebbe 3

Che mi dici della funzione DATEDIFF ?

Citando la pagina del manuale:

DATEDIFF () restituisce espr1 – espr2 express come valore in giorni da una data all’altra. expr1 e espr2 sono espressioni di data o di 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 ricorda che le date dovrebbero essere scritte come YYYY-MM-DD , e non DD-MM-YYYY come hai postato.

Nota se vuoi contare FULL 24h giorni tra 2 date, datediff può restituire valori sbagliati per te.

Come afferma la documentazione:

Nel calcolo vengono utilizzate solo le parti della data dei valori.

quale 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 utilizzando select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (nota l’ordine opposto degli argomenti rispetto al datediff).

Qualche esempio:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); restituisce 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); restituisce 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); restituisce quanti giorni completi di 24 ore sono trascorsi dal 2016-04-13 11:00:00 fino ad ora .

Spero che possa aiutare qualcuno, perché all’inizio non è così ovvio perché datediff restituisce valori che sembrano inaspettati o sbagliati.

Utilizzare la funzione DATEDIFF() .

Esempio dalla documentazione:

 SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); -> 1 

Preferisco TIMESTAMPDIFF perché puoi 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

giorni

  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