2014-12-03 29 views
4

我YYYYMMDD格式有一個整數字段查詢的整數領域,我想回到在某月的某一天進行的所有記錄。有沒有在NSPredicate中執行這種算術的方法,以便將其轉換爲SQL(用於優化查找)?通過只是檢查的最後x位數

基本上我需要執行的操作:(identifier - floor(identifier/100) * 100) == dayidentifier % 100 == day(以較快的比較結果爲準),但這在NSPredicate中似乎不起作用。您似乎無法在謂詞中執行數學運算。

或者,是否有某種方法可以在查詢中將字段轉換爲字符串?所以我可以使用ENDSWITH?

這是一個SQLite商店,讓我覺得有些謂詞比較函數(塊爲主)無法使用,因爲它們可以限制在內存中保存。

有關如何有效執行此操作的任何信息將不勝感激。

+0

爲什麼不將日期數據保留在日期類型中? – stark 2014-12-03 15:42:34

+0

這些日期標識符在我們的應用程序中被標準化和使用,它們是掛鐘日期(即不是從時代開始的時間點),也沒有時間。不管整數表示什麼,問題仍然存在。我們需要基於整數的最後x個數字進行有效查詢。 – Steve 2014-12-03 15:50:16

+0

@Rob可悲的是,我不認爲你可以在SQLite商店中使用predicateWithBlock。 – Steve 2014-12-03 17:18:53

回答

2

我會嘗試ENDSWITH語法。

SQLite傾向於在數值和字符串類型之間進行相當透明的轉換。

+1

嗯,這個工程,只要你比較的值作爲一個字符串,而不是另一個整數。所以'x ENDSWITH 25'不起作用,但'x ENDSWITH「25」'做。謝謝! – Steve 2014-12-04 15:52:43

2

你是一個困難的地方,因爲你真的應該把它看成一個零時間基準日期對象等

在,如果它只是一個字符串,那麼生活會很容易過第二個選項。

將它作爲整數使謂詞粗糙。

剛剛從臀部射擊,但你有沒有嘗試過把它當作一個字符串?雖然Core Data可能會抱怨它,但SQLite並不在乎。

這是一個現有的應用程序還是您有機會更改數據模型?

+0

我們可以更改數據模型,但是將該值作爲NSDate處理將是不切實際的。我們將該值轉換爲日期組件,並且它在整個應用程序中都是這樣使用的,所以整數是編碼日期組件的最佳和最有效的方式。但把它當作一根細繩,並將它與另一根細繩進行比較確實有效,從臀部開槍! – Steve 2014-12-04 15:53:26