все же anotherone, который дает мне горе.
В Выборе SQLite3 DB я запрашиваю для диапазона дат, указанного в (NSDate *) fromDate к (NSDate *) toDate
const char *sql = "SELECT * FROM A, B WHERE A.key = B.key AND A.date between ? and ?";
После открытия DB я выполняю запрос в 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
моей проблемой являются записи, не выбраны (никакие шоу "Успеха" в журнале), и я не понимаю почему.
ранее я неверно рассчитал даты 2 дня спустя как
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, чтобы они сортировались в порядке даты.