Chaque enregistrement de ma base de données SQLite
contient un champ contenant une Date
stockée sous la forme string
au format 'yyyy-MM-dd HH:mm:ss'
.
Est-il possible d'interroger la base de données pour obtenir l'enregistrement qui contient la date la plus récente s'il vous plaît?
tu peux le faire comme ça
SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
Pour moi, j'ai eu ma requête de cette façon pour résoudre mon problème
select * from Table order by datetime(datetimeColumn) DESC LIMIT 1
Depuis que je le stockais comme colonne date/heure
Lorsque vous êtes sûr que le format du champ de texte est yyyy-MM-dd HH:mm:ss
(ex: 2017-01-02 16:02:55
), cela fonctionne donc simplement pour moi:
SELECT * FROM Table ORDER BY dateColumn DESC Limit 1
Sans aucune fonction de date supplémentaire!
Vous pouvez convertir votre colonne "sent_date_time" au format aaaa-MM-jj puis passer commande par date.
1 ) substr(sent_date_time,7,4)||"-"||substr(sent_date_time,1,2)||"-"||substr(sent_date_time,4,2) as date
2) order by date desc
Vous devez le convertir en timestamp Unix, puis les comparer:
SELECT * FROM data ORDER BY strftime('%s', date_column) DESC
Mais cela peut être assez lent s'il y a beaucoup de lignes ..__ Une meilleure approche serait de stocker un timestamp unix par défaut et de créer un index pour cette colonne.
Dans mon cas, tout fonctionne bien sans casting colonne pour taper 'date'. Juste en spécifiant le nom de la colonne avec double quotes comme ça:
SELECT * FROM 'Repair' ORDER BY "Date" DESC;
Je pense que SQLite fabrique le casting tout seul ou quelque chose comme ça, mais quand j'ai essayé de "caster" la colonne Date par moi-même, ça n'a pas marché. Et il n'y avait pas de message d'erreur.
Si vous effectuez beaucoup de tri/comparaison de dates, vous obtiendrez de meilleurs résultats en stockant l'heure sous forme de ticks plutôt que de chaînes. Voici comment obtenir 'maintenant' en ticks avec:
((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000)
(voir https://stackoverflow.com/a/20478329/460084 )
Ensuite, il est facile de trier, comparer, etc ...