2011-04-20 7 views
5

SQLite에서 날짜를 ORDER BY하는 방법이 있습니까? 알파벳순으로 정렬하지 않고 시간순으로 결과를 정렬 하시겠습니까? 예를 들어결과를 SQLite로 날짜순으로 정렬하는 방법

:

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 

월 4 월 이전에 와야한다.

저는 여기에 답변 한 것이 긴 시간 소인으로 내 날짜를 저장하는 것이라고 추측합니다. 그러나 SQLite로 더 쉽게 수행 할 수 있는지 확실하지 않았습니다.

감사합니다.

답변

11

내장 DATE 유형 SQLite는의 (일부 존재 다른 데이터베이스 관리 시스템), 날짜/시간 함수를 멋지게 보완합니다. http://www.sqlite.org/lang_datefunc.html

date ("April 01, 2011")를 사용하여 ISO-8601 날짜를 다시 가져올 수 있습니다 (예 : 2011-04-01).

이 형식은 읽을 수있는 문자열이고 정렬 가능하다는 장점이 있습니다. 2011-03-25는 당연히 표준 문자열 비교 규칙에 따라 2011-04-01 전에 제공되므로 특별한 조작이 필요하지 않습니다.

날짜를 해당 형식으로 저장하고 date() 함수 (또는 기타 관련 함수)를 사용하여 해당 형식을 가져옵니다.

+0

충분히 쉬운, 이것은 나를 위해 속임수를했다. 귀하의 설명과 도움을 많이 주셔서 감사합니다! – littleK

+0

링크를 가져 주셔서 감사합니다. SQLite는 "hello"를 넣을 수 있다면 DATETIME 타입의 컬럼을 생성 할 수있게 해줍니다. 나는 적어도 http://www.sqlite.org/datatype3.html을 발견했다. –

+0

방금이 게시물을 보내 주셔서 감사합니다. 며칠 동안 솔루션을 검색하고 디버깅했습니다. 아주 좋은 해결책, 감사합니다! – Yenthe

1

날짜는 실제 날짜가 아닌 문자열이어야합니다. 날짜를 실제 날짜로 변환해야합니다. 다음은 Sqlite 날짜 및 시간 함수에 대한 링크입니다. http://www.sqlite.org/lang_datefunc.html

-4

이 시도 쿼리의 끝에 order by julianday(date)를 추가하려고 :

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

잘못을하는 데 도움이

 select * from sometable order by date(thestringDateColumn) 

희망 같은 것을 할 수 있습니다. 간단한 문자열 비교는 원래의 포스터가 지적한대로 "M"인 "March"가 "April"다음에 올 것이기 때문에 여기서는 작동하지 않습니다. – VoteyDisciple

관련 문제