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


162

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

Per esempio:

  • La data di arrivo è 12-04-2010
  • Data di partenza 15-04-2010

La differenza del giorno sarebbe 3

Risposte:


262

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-DDe non DD-MM-YYYYcome quelle che hai pubblicato.


sì, ho dimenticato il formato della data quando ho fatto la domanda; p grazie
Audel

4
PS AAAA-MM-GG è lo standard ISO 8601, quindi tutti dovrebbero usarlo. Molto pratico.
Ernestas Stankevičius,

4
Nota : il primo argomento deve essere maggiore del secondo argomento per il datediff()metodo, altrimenti restituirà un valore negativo.
Shashanth,

38

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 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); ritorna 1
  • select 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.


strano che gli argomenti siano capovolti tra datediff()e timestampdiff().
Billynoah,



5

Ottieni giorni tra la data corrente e la data di destinazione

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

produzione

giorni

 335

2
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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.