web-dev-qa-db-ja.com

SQLのLIKEと同等のNSPredicate

NSPredicateを使用してLIKE条件を設定してオブジェクトを取得する方法を探しています。それに加えて、ORも有用です。ユーザーが「James」を検索した場合、次と同等のことを行うNSPredicateを作成できるようなことをしようとしています。

select * from users where firstname LIKE '%James%' OR lastname LIKE '%James%';
49
randombits
NSString *_mySearchKey = @"James";
NSPredicate *_myPredicate = [NSPredicate predicateWithFormat:@"(firstname CONTAINS[cd] %@) OR (lastname CONTAINS[cd] %@)", _mySearchKey, _mySearchKey];
119
Alex Reynolds

CONTAINS演算子は確かにうまく機能します。より直接的な相関関係を探している場合は、LIKE演算子(* = 0文字以上、? = 1文字):

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

参考のために:
https://developer.Apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//Apple_ref/doc/uid/TP40001795-215868 =

37
Dave DeLong

別の可能性

@"firstname beginswith[c] James"

含む素敵な代替として

時々含むは必ずしも正しい答えではありません

10
M. Ryan