Запрос целочисленного поля, просто проверив последние цифры x

У меня есть целое поле в формате YYYYMMDD, и я хочу вернуть все записи, сделанные в определенный день месяца. Есть ли способ выполнить эту арифметику в NSPredicate, чтобы она была переведена в SQL (для оптимизированных поисков)?

В принципе мне нужно выполнить операцию: (identifier - floor(identifier / 100) * 100) == day или identifier % 100 == day (в зависимости от того, что быстрее сравнивается), но это, похоже, не работает в NSPredicate. Вы не можете выполнять математические операции в предикате.

В качестве альтернативы существует ли способ передать поле в виде строки в запросе? Итак, я могу использовать ENDSWITH?

Это хранилище sqlite, поэтому я думаю, что некоторые из функций сравнения предикатов (в основном блоки) не могут использоваться, поскольку они ограничены хранилищами в памяти.

Любая информация о том, как это сделать эффективно, будет с благодарностью.

2 ответа

Я бы попробовал синтаксис ENDSWITH.

SQLite имеет тенденцию трансформироваться между числовыми и строковыми типами довольно прозрачно.


Вы находитесь в трудном месте, потому что вы действительно должны относиться к этому как к объекту даты с нулевым временем и т.д.

Во втором варианте, если бы это была просто строка, жизнь тоже была бы очень легкой.

Наличие целого числа делает ваш предикат грубым.

Просто стрельба из бедра, но вы пробовали рассматривать его как строку? SQLite действительно не волнует, хотя Core Data может жаловаться на это.

Это существующее приложение или у вас есть возможность изменить модель данных?

licensed under cc by-sa 3.0 with attribution.