2014-04-30 5 views
1

안드로이드를 사용하여 SQLite db에서 마지막 12 시간 분량의 항목을 가져 오려고합니다.12 시간 분량의 항목 가져 오기 SQLite

이것이 가능한지 궁금합니다.

내 날짜 형식은 간단한 날짜 형식을 사용하는 "yyyy-MM-dd HH:mm:ss.SSS"입니다.

내 테이블에 TEXT 유형의 CREATED_AT 열이 있습니다.

내가 여기까지있어 :

SELECT * FROM " + ENTRIES_TABLE + " WHERE " + CREATED_AT + ..." 

을 또한,이 CREATED_AT 열 텍스트가 날짜 형식이 아닌 것을 중요합니까?

감사

+0

을 일치하면 '='하고있는 코드는 문제가되지 않지만 코드에서는 올바르게 설명하지 않습니다. 그래도 좋은 생각이 아니야. 'less than' 또는'between'을하고 싶다면 어떻게 될까 –

+4

'STRING' 대신 sqlite'INTEGER'를 사용하여'CREATED_AT'를 유닉스 타임 스탬프로 저장해야합니다. 긴 변수를 사용하여 코드의 값을 읽습니다. 이것은 귀하의 질문에 직접적으로 대답하지 않지만 나중에 비교할 때 도움이됩니다. – ugo

+2

또한 과거 질문에 대한 답을 수락하는 방법도 고려해야합니다. – ugo

답변

0

텍스트 필드, 당신은 훨씬 할 수 없습니다. 실제로 많은 고통없이 항상 작동하는 유일한 옵션은 데이터를 구문 분석하고 수동으로 수행하는 것입니다. 고통스러운 경로는 문자열 비교를 직접 확인하지만, 정오 이전에 1 월 1 일을 처리하는 경우 복잡해집니다.

sqlite에서 날짜를 처리하는 가장 좋은 방법은 유닉스 타임 스탬프를 사용하는 것입니다. 그러면 현재 시간에서 12 시간을 초과하는 시간표를 가진 항목을 선택하는 간단한 문제 일 수 있습니다.

3

SQLite는 dynamic typing을 사용합니다. 열이 TEXT 또는 DATETIME 또는 FLUFFY BUNNIES로 선언 되어도 상관 없습니다.

SQLite의 날짜 형식은 문자열 비교가 올바르게 작동하도록 설계되었습니다. 는, 타임 스탬프에서 12 시간 뺍 built-in date functions 중 하나를 사용하십시오

SELECT * 
FROM Entries 
WHERE CreatedAt >= datetime('now', '-12 hours') 

(SQLite는 날짜 함수는 기본적으로 UTC를 사용합니다 테이블의 값은 일부 지역의 시간대를 사용하지 않는 것이 확인.) 당신의 문자열 경우

관련 문제