2009-08-24 4 views
3

데이터베이스가 잘 생성되고 삽입물이 잘 작동합니다. 아래 select 문에 문제가 있습니다. 레코드를 반환하고 오류를 반환하지 않습니다. 다른 필드의 선택은 잘 작동합니다. 아무도 내가 잘못하고있는 것을 발견 할 수 있습니까? 즉 더 나은 설명의 부족, 제로 시간의 범위이기 때문에iPhone SQLite 날짜 문제

"create table if not exists data (pkey integer primary key, doc date)" 

[db executeUpdate:@"insert into data (doc) values (?)" , [NSDate date]]; 

"select * FROM data WHERE doc between '2009-08-23' and '2009-08-23' " 
+0

을 FMDatabase를 사용하여 액세스 할 수 있지만 레코드가 없을 때마다 GUI를 사용하여 레코드를 입력하고 있습니다. 제 질문을 확인하고 제안하십시오 : http://stackoverflow.com/questions/8772601/date-entry-into-data-through-gui-for-date-which-is-readable-by-fmdatabase –

답변

10

부분 between '2009-08-23' and '2009-08-23'은 항상 false입니다.

정확히 2009-08-23에 항목을 표시하려면 between '2009-08-23' and '2009-08-24'을 선택하십시오. 범위는 24 일 자정부터 자정까지입니다. 여기

행동이의 예 :

sqlite> CREATE TABLE t (d DATETIME); 
sqlite> SELECT DATETIME('now'); 
2009-08-24 02:32:20 
sqlite> INSERT INTO t VALUES (datetime('now')); 
sqlite> SELECT * FROM t; 
2009-08-24 02:33:42 
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-24'; 
sqlite> SELECT * FROM t where d BETWEEN '2009-08-24' and '2009-08-25'; 
2009-08-24 02:33:42 
2

내가 sqlite가에 조회의 정확한 유형을 할 수 있었다 여기에 대한 일 타임 스탬프의 시작과 끝을 얻기 위해 예를 포맷하는 간단한 날짜를 당신의 날짜.

내 경우에는이 타임 스탬프 형식의 타임 스탬프를 sqlite에 저장합니다. "yyyy-MM-dd HH : mm : ss.SSSS". 이 예제는 현재 날짜 ([NSDate date])를 사용합니다.

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
NSDate *startOfDay = [dateFormatter dateFromString:dateString]; 
// add a full day and subtract 1 second to get the end of day timestamp 
NSDate *endOfDay = [startOfDay addTimeInterval:(60*60*24)-1]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSS"]; 

그런 다음 쿼리 값에 startOfDay 및 endOfDay를 사용할 수 있습니다.

+0

해결책 고마워요. 위대한 작품! – Jordan

1

SQLite는 날짜 비교가 아닌 문자열 비교를 수행합니다.

그래서, 당신의 문제를 해결하는 한 가지 방법은 다음과 같습니다

"데이터 SELECT * FROM WHERE '2009-08-23'와 '2009-08-23 99'사이의 의사"내가하려고