82 votes

SQL Sélectionnez entre les dates

J'exécute sqlite pour sélectionner des données entre deux plages pour un rapport de vente. Pour sélectionner les données entre deux dates, j'utilise l'instruction suivante :

 SELECT * FROM test WHERE date BETWEEN "11/1/2011" AND "11/8/2011";

Cette déclaration saisit toutes les dates, même celles en dehors des critères. Le format de date que vous voyez entré est dans le même format que je reçois. Je ne sais pas ce qui ne va pas, mais j'apprécie toute aide que je peux trouver. Merci!

112voto

Eric Petroelje Points 40734

SQLLite exige que les dates soient au format YYYY-MM-DD Étant donné que les données de votre base de données et la chaîne de votre requête ne sont pas dans ce format, il traite probablement vos "dates" comme des chaînes.

41voto

Utku Yıldırım Points 1680

Modifiez vos données dans ces formats pour utiliser les formats datetime sqlite .

 YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD

SELECT * FROM test WHERE date BETWEEN '2011-01-11' AND '2011-08-11'

18voto

AFD Points 2736

Une autre façon de choisir entre les dates dans SQLite consiste à utiliser la puissante fonction strftime :

 SELECT * FROM test WHERE strftime('%Y-%m-%d', date) BETWEEN "11-01-2011" AND "11-08-2011"

Ceux-ci sont équivalents selon https://sqlite.org/lang_datefunc.html :

 date(...)

strftime('%Y-%m-%d', ...)

mais si vous voulez plus de choix, vous l'avez.

5voto

SELECT *
FROM TableName
WHERE julianday(substr(date,7)||'-'||substr(date,4,2)||'-'||substr(date,1,2)) BETWEEN julianday('2011-01-11') AND julianday('2011-08-11')

Notez que j'utilise le format : dd/mm/yyyy

Si vous utilisez j/m/aaaa, changez en substr()

J'espère que cela vous aidera.

4voto

adudakov Points 1

Ou vous pouvez convertir votre chaîne au format Date avec la fonction date. Même la date est stockée sous forme de TEXTE dans la base de données. Comme ceci (la variante la plus réalisable):

 SELECT * FROM test WHERE date(date) 
BETWEEN date('2011-01-11') AND date('2011-08-11')

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