2012-12-30 4 views
52

Ogni record nel mio database SQLite contiene un campo che contiene uno Date memorizzato come string nel formato 'yyyy-MM-dd HH:mm:ss'.Ordine SQLite per data

È possibile interrogare il database per ottenere il record che contiene la data più recente per favore?

+6

È necessario memorizzare la data in millisecondi e convertirla ogni volta che è necessario visualizzarla. Questo renderà più semplice l'ordinamento, ecc. – Andrei

risposta

113

si può fare in questo modo

SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1 
+37

nota che se vuoi ordinare per data ** e ora ** devi usare 'datetime()' intead di 'date()' – eliocs

2

È necessario convertirlo in unix timestamp, e poi confrontarle:

SELECT * FROM data ORDER BY strftime('%s', date_column) DESC 

ma questo può essere piuttosto lento, se ci sono un sacco di righe. Un approccio migliore sarebbe quello di memorizzare un timestamp unix per impostazione predefinita e creare un indice per quella colonna.

34

Per quanto mi riguarda ho avuto la mia domanda in questo modo per risolvere il mio problema

select * from Table order by datetime(datetimeColumn) DESC LIMIT 1 

Dal momento che stavo immagazzinarla come datetime non colonna data

+3

Inoltre, la funzione date() restituisce la data in questo formato: AAAA-MM-GG. La funzione time() restituisce l'ora come HH: MM: SS. La funzione datetime() restituisce "AAAA-MM-GG HH: MM: SS". – wangqi060934

+0

Che differenza hai avuto con la tua risposta rispetto alla precedente? @Ahmad Baraka –

+0

@GowthamSubramaniam utilizzando datetime() invece di date() – AnthoPak

1

Puoi convertire la colonna "sent_date_time" nel formato aaaa-MM-gg e quindi ordinare per data

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 
0

Quando si che il formato di campo di testo è yyyy-MM-dd HH:mm:ss (es .: 2017-01-02 16:02:55), in modo che funziona per me semplicemente:

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

Senza alcuna funzione di data extra!

0

Nel mio caso tutto funziona bene senzacolonna per digitare 'data'. Basta specificando nome della colonna con doppie citazioni del genere:

SELECT * FROM 'Repair' ORDER BY "Date" DESC; 

Penso SQLite rende fusione da sola o qualcosa di simile, ma quando ho cercato di 'lanciare' colonna Data da solo non ha funzionato. E non c'erano messaggi di errore.