2013-04-08 3 views
0

일부 데이터를 저장하는 데 SQLite를 사용하고 있으며 문자열을 사용하고 있으므로 날짜 개체를 SQLite 데이터베이스에 저장할 수 없다는 것을 알고 있습니다.SQLite에서 현재 날짜보다 이전 날짜를 테스트하는 방법

제 문제는 테이블 인 가장 빠른 날짜를 확인하고 싶습니다. 따라서 2011 년 1 월 4 일과 2013 년 4 월 5 일이었던 카드가 2 장있는 경우 2012 년 1 월 1 일이 이전 날짜이고 그 행을 반환한다는 것을 알고 싶습니다.

은 지금까지 나는이 개 솔루션으로 올라와있다 :

여러 쿼리를 나는 데이터베이스를 통해 반복에 의해 날짜 객체를 감소 성공적인 솔루션을 구현할 수 있었다

DB를에 1은 날짜와 일치하는 문자열로 사용됩니다. 가장 빠른 날짜를 찾기 전에 데이터베이스를 100 번 쿼리해야 할 수도 있습니다. 이런 식으로하는 것이 나쁜 습관입니까? 결과를 통해

반복은 또 다른 가능성은 테이블의 모든 플래시 카드의 결과 집합을 반복하는

설정이다. 그러나 이것은 2 개의 루프를 포함 할 것입니다. 하나는 테이블의 각 행을 반복하여 하나의 날짜를 줄이는 루프 안에 있습니다.

두 가지 모두 훌륭한 해결책이 아닙니다. 나는 누군가가 나를보다 효율적으로이 일을 도울 수 있을지 궁금해한다.

답변

5

YYYY-MM-DD 형식으로 날짜를 저장하는 경우 실제 날짜 데이터 형식과 마찬가지로 <, >BETWEEN을 사용할 수 있습니다. YYYY-MM-DD 날짜 형식 인 경우 사전 식 순서는 시간순 순서와 같습니다.

YYYY-MM-DD 날짜 형식이 SQLite Date And Time Functions과 호환된다는 점이 장점입니다.

+0

, 나는 선택하려고 해요된다 현재 날짜와의 차이가 가장 큰 행 : 'resultSet = statement.executeQuery ("SELECT MAX (날짜)"date ('interval')), id FROM flashcard "); 날짜와 상관없이 같은 행. 내가 뭘 잘못하고 있는지 설명해 주시겠습니까? –

+0

@JoeDawtry 최소 날짜 만 원하는 것처럼 보입니다. ''SELECT MIN (date (date_column_name)) FROM flashcard ''를 실행하면 어떻게됩니까? –

+0

오류가 내 대신에 테이블에 남은 행에 대한 null 값이 있습니다. 당신의 방법은 완벽하게 작동했습니다, 대단히 감사합니다! –

1

스토어 1월 1일 1970

이후의 일 수와 날짜 그 방법은 SQL 나는 같은 것을 사용하려는 시도를했습니다

Select MIN(days) 
+0

이것은 매우 간단하고 구현하기 쉬운 방법입니다. 좋은 생각입니다. 많은 감사합니다. –

관련 문제