2010-04-29 31 views
47

Tôi đang tìm cách sử dụng NSPredicate để đặt điều kiện LIKE để tìm nạp đối tượng. Ngoài ra, OR cũng sẽ hữu ích. Tôi đang cố gắng để làm một cái gì đó mà nếu người dùng tìm kiếm "James" Tôi có thể viết một NSPredicate rằng sẽ làm tương đương với:NSPredicate tương đương với SQL LIKE

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

Trả lời

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

Điều gì có nghĩa là '[cd]'? Tôi không thể tìm thấy điều này trong tài liệu. Đã tìm thấy –

+26

! Nó có nghĩa là Trường hợp & Diacritic insensitive –

+1

@AlexReynolds tại sao bạn không sử dụng LIKE? – onmyway133

35

Nhà điều hành CONTAINS chắc chắn sẽ chỉ làm việc tốt. Nếu bạn đang tìm kiếm một mối tương quan trực tiếp hơn, sau đó bạn cũng có thể sử dụng toán tử NHƯ (* = 0 hoặc nhiều ký tự, ? = 1 ký tự):

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

Để tham khảo:
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Predicates/Articles/pSyntax.html#//apple_ref/doc/uid/TP40001795-215868

+6

Tôi biết đã lâu rồi, nhưng điều này không hiệu quả, vì NSPredicate không thay thế nội dung được trích dẫn '% @' sẽ ở lại '% @' ... –

+1

bắt đầu với [c] nó cho tôi nhưng vẫn còn, có bất kỳ ai được quản lý để tạo truy vấn LIKE động như '% @ *' –

+7

Bí quyết sử dụng như thế là bao gồm dấu * trong đối số. tức là: 'NSPredicate * predicate = [NSPredicate predicateWithFormat: @"% K LIKE [cd]% @ ", kMDItemDisplayName, [NSString stringWithFormat: @" *% @ * ", tên ứng dụng]];' –

9

một khả năng

@"firstname beginswith[c] James" 

là một lựa chọn tốt đẹp để chứa

Đôi khi không phải lúc nào cũng có câu trả lời đúng

+1

Không khớp với "SuperJames" :) startswith không bằng sql như '% foo%' – marsbear

Các vấn đề liên quan