133 votes

Différence entre 2 dates en SQLite

Comment obtenir la différence en jours entre 2 dates en SQLite ? J'ai déjà essayé quelque chose comme ceci :

SELECT Date('now') - DateCreated FROM Payment

Il renvoie 0 à chaque fois.

6voto

oneinazillion Points 29

Étant donné que votre format de date suit : "AAAA-MM-JJ HH:MM:SS", si vous avez besoin de trouver la différence entre deux dates en nombre de mois :

(strftime('%m', date1) + 12*strftime('%Y', date1)) - (strftime('%m', date2) + 12*strftime('%Y', date2))

4voto

Gary Points 99

Juste une remarque pour l'écriture des fonctions de timeclock. Pour ceux qui recherchent les heures travaillées, il suffit de modifier cette fonction pour que les heures et les minutes soient affichées sous forme de pourcentage de 60, comme le souhaitent la plupart des sociétés de paie.

CAST ((julianday(clockOUT) - julianday(clockIN)) * 24 AS REAL) AS HoursWorked

Clock In            Clock Out           HoursWorked
2016-08-07 11:56    2016-08-07 18:46    6.83333332836628

4voto

Stephen Quan Points 4429

Tout d'abord, le format de votre date n'est pas clair. Il existe déjà une réponse impliquant strftime("%s") .

J'aime développer cette réponse.

SQLite ne dispose que des classes de stockage suivantes : NULL, INTEGER, REAL, TEXT ou BLOB. Pour simplifier les choses, je vais supposer que les dates sont des REAL contenant les secondes depuis le 1970-01-01. Voici un schéma type pour lequel je vais mettre les données types du "1er décembre 2018" :

CREATE TABLE Payment (DateCreated REAL);
INSERT INTO Payment VALUES (strftime("%s", "2018-12-01"));

Maintenant, calculons la différence de date entre le "1er décembre 2018" et maintenant (au moment où j'écris ces lignes, il est midi le 12 décembre 2018) :

Différence de date en jours :

SELECT (strftime("%s", "now") - DateCreated) / 86400.0 FROM Payment;
-- Output: 11.066875

Différence de date en heures :

SELECT (strftime("%s", "now") - DateCreated) / 3600.0 FROM Payment;
-- Output: 265.606388888889

Différence de date en minutes :

SELECT (strftime("%s", "now") - DateCreated) / 60.0 FROM Payment;
-- Output: 15936.4833333333

Différence de date en secondes :

SELECT (strftime("%s", "now") - DateCreated) FROM Payment;
-- Output: 956195.0

3voto

Matas Lesinskas Points 165

Si vous voulez l'heure au format 00:00 : Je l'ai résolu comme ça :

SELECT strftime('%H:%M',
                CAST((julianday(FinishTime) - julianday(StartTime)) AS REAL),
                '12:00')
FROM something;

2voto

Sandris B Points 143

Si vous voulez la différence en secondes

SELECT strftime('%s', '2019-12-02 12:32:53') - strftime('%s', '2019-12-02 11:32:53')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X