2013-04-08 66 views
0

當前的日期,我使用SQLite來存儲一些數據,我知道一個日期對象不能,所以我使用字符串存儲SQLite數據庫。如何早期測試日期比SQLite的

我的問題是,我要檢查的是表中的最早日期。所以,如果有2個卡之一這是2013年1月4日和2013年4月5日我要承認,2013年1月4日是較早的日期並返回該行。

到目前爲止,我已經拿出了2個解決方案:

多個查詢到DB

我已經能夠實現一個成功的解決方案,將通過數據庫進行迭代,並通過減少一個日期對象1然後用作字符串來匹配日期。問題是數據庫可能需要查詢100次,才能找到最早的日期。這樣做是不好的做法嗎?

迭代通過結果集

另一種可能性是在結果集中在表中的所有的卡片進行迭代。然而,這將涉及2路,一到表中的每一行這將是一個循環,將通過1

我覺得這兩個都不是很大的解決方案降低了日期內迭代。我想知道是否有人可以幫助我以更有效的方式實現這一目標?

回答

5

如果您以YYYY-MM-DD格式存儲日期,則可以使用<,>BETWEEN,就像使用實際的Date數據類型一樣。隨着YYYY-MM-DD日期格式,詞典順序相同的時間順序。

另外一個好處是,YYYY-MM-DD日期格式與SQLite Date And Time Functions兼容。

+0

我已嘗試過使用類似,我試圖選擇當前日期之間的差異最大的行: 'resultSet = statement.executeQuery(「SELECT MAX(date(now) - date('interval')),id FROM flashcard」);' 但是,它只是返回無論日期如何,都是同一行。你能解釋我做錯了什麼嗎? – 2013-04-08 19:22:54

+0

@JoeDawtry它看起來像你只是想最小日期。當你運行''SELECT MIN(date(date_column_name))FROM flashcard「'時會發生什麼? – 2013-04-08 19:43:21

+0

錯誤代表了我的意思,我的表中剩下的行的空值。你的方法工作完美,非常感謝你! – 2013-04-08 22:09:44

1

Store中的日期的天數自1月1日1970年

這樣一來,SQL成爲

Select MIN(days) 
+0

這是一個非常簡單和容易實現的方法,偉大的想法。非常感謝。 – 2013-04-08 22:10:29