SQLite3 - выберите диапазон дат, не работающий

все же 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 "Успех в журнале). Я озадачен...

1
задан 22 April 2010 в 14:54
поделиться

1 ответ

SQLite не имеет типа даты (хотя у него есть хорошие функции даты). Ваши сравнения выполняются на строках. Чтобы они работали правильно, вы должны изменить свой формат на yyyyMMdd или yyyy-MM-dd, чтобы они сортировались в порядке даты.

1
ответ дан 3 September 2019 в 01:06
поделиться