Я пытаюсь закодировать метод, который вернет сумму всех затрат в моей таблице «Стоимость», но на этой текущей неделе (принимая понедельник как 1-й день недели)
Вот так выглядит моя БД:
И это данные, которые у меня внутри
У меня примерно так:
- (float)getthisweekscosts {
float sumprice = 0; // We initialize the total price for all the rows
NSString *getcurrentcost = [NSString stringWithFormat:@"%@", @"SELECT COSTAMOUNT FROM COST WHERE DATE > DATE('now', 'weekday 0', '-7 days')"];
const char *query_stmt_budget = [getcurrentcost UTF8String];
if (sqlite3_prepare_v2(costDB,query_stmt_budget, -1, &statement, NULL) == SQLITE_OK){
while (sqlite3_step(statement) == SQLITE_ROW){
NSString *currentcost = [NSString stringWithFormat:@"%s",(const char *) sqlite3_column_text(statement, 0)];
sumprice += [currentcost floatValue];
}
sqlite3_finalize(statement);
}
sqlite3_close(costDB);
return sumprice;
}
Источник: Получите данные за эту неделю с помощью SQLite
Но я не уверен, почему в моем случае он возвращает 0.


проверьте тип столбца COSTDATE DATE '?
если это правда, тебе не нужен DATE(COSTDATE)
использовать COSTDATE
ваши данные и sql верны
это тестовая демонстрация
CREATE TABLE COST(
COSTAMOUNT REAL,
COSTDATE DATE
);
INSERT INTO COST VALUES (2.48,'2018/05/19');
INSERT INTO COST VALUES (2.85,'2018/05/19');
INSERT INTO COST VALUES (null,null);
SELECT sum(COSTAMOUNT) --result 5.33
FROM COST
WHERE COSTDATE > DATE('now', 'weekday 0', '-7 days')
отлаживать и проверять свой код
if (sqlite3_prepare_v2(costDB,query_stmt_budget, -1, &statement, NULL) == SQLITE_OK){
while (sqlite3_step(statement) == SQLITE_ROW){
NSString *currentcost = [NSString stringWithFormat:@"%s",(const char *) sqlite3_column_text(statement, 0)];
sumprice += [currentcost floatValue];
}
sqlite3_finalize(statement);
}
Я сделал ! Сейчас он у меня такой: WHERE DATE > DATE('now', 'weekday 0', '-7 days'), но все равно 0.
ВЫБЕРИТЕ сумму (COSTAMOUNT) FROM COST WHERE COSTDATE> DATE ('now', 'weekday 0', '-7 days') попробуйте, если все еще 0, покажите свои данные
ВЫБЕРИТЕ COSTAMOUNT, COSTDATE FROM T заказ по COSTDATE desc, используйте этот скрипт, чтобы показать ваши 10 лучших данных
Я загрузил картинку с имеющимися у меня данными. Это всего лишь несколько записей
Приятно, что вы создали скрипт SQL. Если я добавлю эту строку INSERT INTO COST VALUES (1.00,'2018/04/12'); (это на прошлой неделе), результат будет 6,33 :(. Я действительно не знаю, что может быть не так.
sql прав, попробуйте отладить, запустите свой код, проверьте логику кода
проверьте свою db sysdate, выберите DATE ('now', 'weekday 0', '-7 days'), DATE ('now', 'weekday 0', '-0 days');
Я получаю «2018-05-13» для первого и «2018-05-20» для второго
Кажется, что sql прав, вы отлаживаете свой код?
Да, у меня действительно есть :(. Когда я запускаю SELECT sum(COSTAMOUNT) FROM COST, он получает все строки. Это нормально. Но когда я добавляю WHERE COSTDATE > DATE('now', 'weekday 0', '-7 days'), я получаю 0 строк. Так что я уверен на 100%, что проблема в этом :(
Я загрузил картинку, как выглядит моя БД. COSTDATE хорошо определен, и я использовал только
COSDATEвместоDATE(COSTDATE). Не повезло :(