2015-09-29 2 views
1

J'ai deux tables dans sqlite3:résultats différents pour une requêtes similaires dépend du format de chaîne de date dans sqlite3

sqlite> create table date_1 (date text); 
sqlite> create table date_2 (date text); 

Chaque table contient trois lignes avec des dates écrites dans différents formats:

sqlite> select * from date_1; 
28.09.2015 
28.08.2015 
29.08.2015 
sqlite> select * from date_2; 
2015-09-28 
2015-08-28 
2015-08-29 

Ma date actuelle est:

sqlite> select date('now'); 
2015-09-29 

Pourquoi ai-je des résultats différents pour les prochaines requêtes similaires?

sqlite> select * from date_1 where date < strftime('%d.%m.%Y', 'now', '-1 day'); 
28.08.2015 
sqlite> select * from date_2 where date < strftime('%Y-%m-%d', 'now', '-1 day'); 
2015-08-28 
2015-08-29 

Pourquoi la première requête ne renvoie pas aussi '29 .08.2015 '?

Répondre

1

SQLite has no date type. Lorsque vous faites date < strftime(...) vous faites une comparaison de chaînes . Le format de date ISO 8601, comme 2015-08-28, sera comparé à des dates comparées à des chaînes. 28.08.2015 ne sera pas, il va peser le jour d'abord, puis le mois, puis l'année.

strftime ne comprend qu'un nombre limité de formats (voir "Time Strings") et 28.09.2015 n'en fait pas partie. Enregistrez toutes les dates au format ISO 8601 ou suivez the answers to this question cover how to compare dates in SQLite.

+1

Merci beaucoup! Je pense, il vaudra mieux stocker la date au format ISO 8601 et convertir dans différents formats comme dd.mm.yyyy dans les requêtes SQL avec strftime() si nécessaire pour certaines raisons. –