另一个让我悲伤的人。
在SQLite3 DB Select中,我查询(NSDate *)fromDate到(NSDate *)toDate中指定的日期范围
const char *sql = "SELECT * FROM A, B WHERE A.key = B.key AND A.date between ? and ?";
打开数据库后,我在Objective-C中运行查询,如下所示:
NSDateFormatter *tmpDatFmt = [[[NSDateFormatter alloc] init] autorelease];
[tmpDatFmt setDateFormat:@"dd-MM-yyyy"];
sqlite3_stmt *stmt;
if(sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) == SQLITE_OK) {
NSLog(@"From %s to %s;", [[tmpDatFmt stringFromDate:fromDate] UTF8String], [[tmpDatFmt stringFromDate:toDate] UTF8String]);
sqlite3_bind_text(stmt, 1, [[tmpDatFmt stringFromDate:fromDate] UTF8String], -1, SQLITE_STATIC); // first '?'
sqlite3_bind_text(stmt, 2, [[tmpDatFmt stringFromDate:toDate] UTF8String], -1, SQLITE_STATIC); // second '?'
while(sqlite3_step(stmt) == SQLITE_ROW) {
NSLog(@"Success");}
在数据库中,我有一些与日期范围匹配的记录:
12-04-2010 = in seconds 1271059200
13-04-2010 = in seconds 1271145600
13-04-2010 = in seconds 1271152800
14-04-2010 = in seconds 1271267100
当我运行它时,第一个NSLog显示
From 2010-04-01 to 2010-04-30
我的问题是未选择记录(日志中未显示“成功”),我也不明白为什么。
早些时候,我误算了两天后的日期,因为
14-04-2010 = in seconds 1271232000
15-04-2010 = in seconds 1271318400
15-04-2010 = in seconds 1271325600
16-04-2010 = in seconds 1271439936
这些日期效果很好(4 x“成功记录”。我很困惑...
最佳答案
SQLite没有日期类型(尽管它具有良好的日期功能)。您的比较是在字符串上完成的,要使其正常工作,您应该将格式更改为yyyyMMdd或yyyy-MM-dd,以便它们按日期顺序排序。
关于iphone - SQLite3-选择日期范围不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691886/