2010-03-14 4 views
0

sqlite3에서 datetimes를 비교하는 데 문제가 있습니다. 내 Mac에서 SQL 쿼리를 실행할 때 작동합니다. 그러나 iPhone에서는 정확히 동일한 쿼리가 실패합니다.sqlite3 datetime이 iPhone에서 제대로 작동하지 않습니다.

INSERT OR IGNORE INTO `Artists` (`id`,`name`) VALUES ('1','Justin'); 

I가 업데이트되지 않은 작가의 수를 찾기 위해 노력하고있다 :

CREATE TABLE IF NOT EXISTS `Artists` (
`id` int(11) NOT NULL PRIMARY KEY, 
`name` varchar(256) NOT NULL, 
`lastUpdate` date NOT NULL default CURRENT_TIMESTAMP , 
... 
... 
); 

내가 가진 예술가를 삽입 할 수 있습니다 다음과 같이

은 내가 sqlite3를 테이블 설정을 가지고 지난 2 초 (짧게 유지) :

SELECT COUNT(*) FROM `Artists` WHERE `id` = ? AND `lastUpdate` < datetime('now','-2 seconds'); 

iPhone에서이 값은 0을 반환합니다. PC에서는 1을 반환합니다. 나는 그 값이 1이 될 것으로 기대하고있다. 그 차이점은 무엇인가?

-(BOOL) artistNeedsUpdating:(int)artistId 
{ 
    [dbLock lock]; 
    BOOL result = NO; 
    sqlite3_stmt *statement; 

    const char* query = "SELECT COUNT(*) FROM `Artists` WHERE `id` = ? AND `lastUpdate` < datetime('now','-2 seconds');"; 
    if(sqlite3_prepare_v2(database, query, -1, &statement, NULL) == SQLITE_OK){ 
     sqlite3_bind_int(statement, 1, artistId); 

     if(sqlite3_step(statement) == SQLITE_ROW){ 
      if(sqlite3_column_int(statement, 0) > 0) // If 0, then we don't need to update 
       result = YES; 
     } 

     sqlite3_finalize(statement); 
    } 
    [dbLock unlock]; 
    return result; 
} 

나는 그것이 하나 개의 플랫폼에서 작동하지만 다른, 사람이 어떤 아이디어를 가지고하지 않습니다 이유에 혼란 스러워요 : 나는 의하여 값을 검색입니까?

는 내 실수였다, 저스틴

답변

0

에게, 신경 끄시을 주셔서 감사합니다.

가 있었어야하는 경우가

UPDATE `Artists` SET `lastUpdate`='CURRENT_TIMESTAMP'; 

으로 수행되었다 후에 내가 행을 갱신했다 :

UPDATE `Artists` SET `lastUpdate`=CURRENT_TIMESTAMP; 
관련 문제