2011-04-20 9 views
5

Czy istnieje jakiś sposób w SQLite na ZAMÓWIENIE WEDŁUG daty, a wynik powinien być uporządkowany według czasu, a nie alfabetycznie?Pomoc w zamawianiu wyniku według daty w SQLite

Na przykład:

SELECT * FROM details GROUP BY date; 

John |  Smith  |  April 01, 2011 
John |  Smith  |  April 03, 2011 
John |  Smith  |  April 04, 2011 
John |  Smith  |  March 25, 2011 

marca powinny pochodzić przed kwietniem.

Zgaduję, że tutaj odpowiedzią jest przechowywanie moich dat jako długich znaczników czasu, jednak nie byłem pewien, czy można to zrobić łatwiej z SQLite.

Dzięki!

Odpowiedz

11

Nie ma wbudowany DATE typu w SQLite (jak istnieje w niektórych inne systemy zarządzania bazami danych), ale ma ono dobre uzupełnienie funkcji daty i czasu: http://www.sqlite.org/lang_datefunc.html

Możesz użyć daty ("01 kwietnia 2011 r."), Aby uzyskać datę ISO-8601 (np. 2011-04-01).

Ten format ma zalety zarówno czytelnego ciągu, jak i możliwości sortowania. 2011-03-25 naturalnie jest przed 2011-04-01 standardowymi regułami porównywania ciągów, więc nie wymaga żadnej specjalnej operacji.

Przechowuj daty w tym formacie i pobierz ten format za pomocą funkcji date() (lub innej odpowiedniej funkcji).

+0

Łatwo to załatwić. Dziękuję bardzo za wyjaśnienia i pomoc! – littleK

+0

Dzięki za link, to mnie uratowało! Wygląda na to, że SQLite pozwala ci utworzyć kolumnę typu DATETIME, jeśli umieścisz w niej słowo "cześć"! Odkryłem przynajmniej http://www.sqlite.org/datatype3.html. –

+0

Po prostu musiałem Ci podziękować, szukałem rozwiązania tego problemu przez kilka dni. Bardzo dobre rozwiązanie, dzięki! – Yenthe

-4

Spróbuj tego:

SELECT * FROM details GROUP BY date ORDER BY date ASC; 
+0

Err ... nie. Proste porównanie ciągów nie zadziała tutaj, ponieważ (jak wskazuje oryginalny plakat) "March", będąc "M", nadejdzie po "April". – VoteyDisciple

0

można zrobić coś takiego

 
select * from sometable order by date(thestringDateColumn) 

nadzieję, że to pomaga

Powiązane problemy