我无法让sqlite3在日期时间之间进行比较。在我的Mac上,当我运行sql查询时,它可以工作。但是,在iPhone上,完全相同的查询失败。
我有一个sqlite3表设置如下:
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 ,
...
...
);
我可以插入一位艺术家:
INSERT OR IGNORE INTO `Artists` (`id`,`name`) VALUES ('1','Justin');
我正在尝试查找过去2秒内未更新的艺术家数量(为了保持简短):
SELECT COUNT(*) FROM `Artists` WHERE `id` = ? AND `lastUpdate` < datetime('now','-2 seconds');
在iPhone上,这会返回0.在我的电脑上,它返回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 :(得分:0)
没关系,这是我的错误。
在完成
之后我正在更新该行UPDATE `Artists` SET `lastUpdate`='CURRENT_TIMESTAMP';
应该是:
UPDATE `Artists` SET `lastUpdate`=CURRENT_TIMESTAMP;