2012-01-02 144 views
0

我創建了String格式(日/月/年)的String列的數據庫。我想從兩個給定日期之間的表中獲取數據,但是當我嘗試使用下面的查詢時,發現它對我選擇的月份和年份沒有影響;它僅從「dd/mm/yy」比較「dd」字段。Sqlite查詢無法正常工作

以下查詢將顯示從每個月和每年的第14天到第25天之間的所有數據。我想要給定日期,月份和年份之間的數據。

Select * from RunningLog 
where CAST(RunDate AS DATETIME) between CAST('14/04/2011' AS DATETIME) and 
     CAST('25/04/2011' AS DATETIME) 

回答

0

SQLITE3文檔說它可以投一個日期時間:http://www.sqlite.org/lang_expr.html(參見演員表情數字)。你爲什麼不從Java那裏做到這一點?我的意思是,你如何在數據庫中存儲日期?我強烈建議保存一段時間(Unix時間);這樣你可以很容易地得到一些代表確切日期和時間的長數字,並用它們來查詢你的表格。

0

建議:使用數據庫中的日期時間字段和JodaTime作爲時間庫。

很容易解析日期時間到DateTime對象中,然後您有許多有用的方法來比較和使用日期。

此外,你的SQL查詢會更好。

1

請參閱我的回答here關於日期(或不)存儲在sqlite3中的方式。 Sqlite沒有日期字段,所以它實際上存儲爲一個字符串。試圖對此進行排序/過濾將證明是困難的。請使用int字段,並以毫秒爲單位存儲時間。

我更喜歡INTEGER/Unix時間存儲,然後使用內置的日期和時間函數來格式化從數據庫中提取時間。

實施例:在數據庫中作爲一個整數

long millis = Calendar.getTimeInMillis(); 

商店米利斯。然後,請參閱關於如何在sqlite3中使用日期和時間函數的第一個鏈接。

0

您可以計算兩個日期之間的秒數。這裏是一個例子: SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');

根據差異的標誌,您可以說一個日期是否在另一個日期之前。在你的情況下,你必須做兩個比較,所以你必須驗證兩個差異的跡象。在這裏你可以找到其他的例子,也許他們給你其他的想法(http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions)。