Я программирую приложение для дня рождения и хочу использовать sqflite для сортировки ближайшей даты. Через страницу: запрос SQLite для получения ближайшего datetime, который я узнал насчет strftime, но, к сожалению, я не знаю, как его использовать с Flutter. Вот несколько примеров того, как отсортировать дату и как я пытаюсь найти текущую дату с помощью strftime.
Future<List<Map<String, dynamic>>> getSortDateMapListToDate(bool sort) async {
Database db = await this.database;
String sortingDirection = '$colDate DESC';
if(!sort) {
sortingDirection = '$colDate ASC';
}
DateTime test = DateTime.now();
//var result = await db.query(dateTable, orderBy: sortingDirection);
var result = await db.rawQuery('SELECT * from $dateTable orderBy abs(strftime("%s",$test) - strftime("%s", $colDate))');
return result;
}
Может есть еще одна возможность или кто-то уже работал с rawquerys и strftime.
Буду благодарен за любую подсказку или помощь.
РЕДАКТИРОВАТЬ: с помощью @heitor murara я редактирую свой код:
var result = await db.rawQuery(
"SELECT s.id, s.name, s.date, s.priority, (strftime('%y-%m-%d', '2020-06-30') - strftime('%y-%m-%d', s.$colDate)) as 'TestDate' "
"FROM $dateTable s "
"ORDER BY TestDate"
);
даты, которые я использую: 30.06.2020 и с strftime ('% s) я получаю строки:
- 2015-08-15 // 32 оставшихся дня
- 2010-11-03 // 126 оставшихся дней
- 2010-07-10 // 10 оставшихся дней
- 1994-07-17 // 17 оставшихся дней
- 1993-06-29 // 364 оставшихся дня
с strftime ('% y-% m-% d) я получаю строки:
- 1994-07-17 // 17 оставшихся дней
- 1993-06-29 // 364 оставшихся дня
- 2015-08-15 // 32 оставшихся дня
- 2010-11-03 // 126 оставшихся дней
- 2010-07-10 // 10 оставшихся дней
чего я пытаюсь достичь:
- 2010-07-10 // 10 оставшихся дней
- 1994-07-17 // 17 оставшихся дней
- 2015-08-15 // 32 оставшихся дня
- 2010-11-03 // 126 оставшихся дней
- 1993-06-29 // 364 оставшихся дня
другое решение, которое, на мой взгляд, было бы триггером, который каждый день проверяет, изменяется ли дата, оставшиеся дни рассчитываются динамически.
Есть у кого-нибудь подсказка? :)