web-dev-qa-db-fra.com

SQLite Order By Date1530019888000

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?

59
duncanportelli

tu peux le faire comme ça

SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
127
paritosh

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

39
Ahmad Baraka

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!

4
Nabi K.A.Z.

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
3
bpatel

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.

3
Zaffy

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.

1
user3765475

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 ...

0
kofifus