NSPredicate, эквивалентный SQL LIKE - программирование
Подтвердить что ты не робот

NSPredicate, эквивалентный SQL LIKE

Я ищу способ использовать NSPredicate для установки условия LIKE для извлечения объектов. Кроме того, было бы полезно использовать OR. Я пытаюсь что-то сделать, если пользователь ищет "Джеймс", я могу написать NSPredicate, который будет выполнять эквивалент:

select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';
4b9b3361

Ответ 1

NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"(firstname CONTAINS[cd] %@) OR (lastname CONTAINS[cd] %@)", _mySearchKey, _mySearchKey];

Ответ 2

Оператор CONTAINS, безусловно, будет работать нормально. Если вы ищете более прямую корреляцию, вы также можете использовать оператор LIKE (*= 0 или более символов, ?= 1 символ):

NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"firstname LIKE '*%[email protected]*' OR lastname LIKE '*%[email protected]*'", _mySearchKey];

Для справки:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215868

Ответ 3

Другая возможность

@"firstname beginswith[c] James"

Как хорошая альтернатива содержит

Иногда содержит не всегда правильный ответ