03-NSPredicate謂詞

葉喬木發表於2019-01-02

NSPredicate 謂詞

在查詢資料的過程中,給NSFetchRequest設定一個過濾條件,不需要講所有的託管物件載入到記憶體中去。這樣的話就會節省記憶體和加快查詢速度。

一 運算子

1 比較運算子

、< 、== 、>= 、<= 、!=

比如說age>80

NSPredicate *pre = [NSPredicate predicateWithFormat:@"age > 80"];

2.範圍運算子:IN 、BETWEEN 表示一個範圍

   // 過濾條件 BETWEEN 年齡在27 到 30 之間的範圍 IN 是 包含,過濾包含27 或者 28的物件
//    NSPredicate *pre = [NSPredicate predicateWithFormat:@"age BETWEEN {27,30}"];
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"age BETWEEN {27,28}"];

3 字串本身:SELF

// 字串本身 找到name等於某個字串的操作
NSPredicate *pre = [NSPredicate predicateWithFormat:@"name == '編號322'"];

4 字串相關的操作 BEGINSWITH(以某個字串開頭)、ENDSWITH(以某個字串結束)、CONTAINS(包含某個字串)

    // [c]不區分大小寫
    // [d]不區分發音符號即沒有重音符號
    // [cd]既不區分大小寫,也不區分發音符號
    // CONTAINS 包含指定字串的
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name CONTAINS[cd] '編號322'"];
	// BEGINSWITH 以指定字串的開始的
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name BEGINSWITH[cd] '編號'"];
	// ENDSWITH 以指定字串的結束的
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name ENDSWITH[cd] '2'"];

5 萬用字元 LIKE 常用於模糊查詢

//    *注*: 星號 "*" : 代表0個或多個字元
//    問號 "?" : 代表一個字元
    // 找出編號開頭的name
    NSPredicate *pre = [NSPredicate predicateWithFormat:@"name  LIKE[cd] '編號*'"];

6 keyPath 建立查詢條件的時候,支援設定被匹配的目標的keypath,設定更為深層次的匹配目標

[NSPredicate predicateWithFormat:@"employee.name = %@", @"lxz"]

相關文章