2012-11-11 66 views
2

我是Sqlite的初學者,並努力爲我所需要的查詢進行拼合。 :-( 任何人都可以幫我嗎?Sqlite datediff替代Android中的訂購

我有一個給定的日期,在這個變量下面我的例子中被稱爲「givenDate」,是Java類型的格式爲YYYY-MM 日期,因此-dd

我也有一個數據庫表叫「主」「ID」「日期」柱,日期列條目是ISO標準的字符串格式。因此,項看看像這樣:

ID Date 
001 1949-08-13 06:29:21.000 
002 1943-08-13 10:13:45.000 
003 1948-08-13 09:12:32.100 
004 etc. 

我需要從表「主」比較時日期列的10個最近的日期列表與我的給定日期「givenDate」。

所以我需要:

  1. 通過最小的日期列每個日期進行比較,以我定的日期「givenDate」
  2. 制定出它們之間的絕對差值
  3. 責令其最大的區別
  4. 返回的ID和日期爲每個最小10個結果的

所以,如果givenDate是1948年9月13日噸母雞的結果將是:由於該數據庫SQLite數據庫

003 1948-08-13 09:12:32.100 
001 1949-08-13 06:29:21.000 
002 1943-08-13 10:13:45.000 
etc 

則DateDiff不會在Android中使用。

我試圖做這樣的事情:

String query = 
"SELECT ID, Date" + 
"FROM main" + 
"WHERE Date IS NOT NULL" + 
"ORDER BY ABS(date("+givenDate+") - Date) ASC" + 
"LIMIT 10"; 

這似乎並沒有工作。我只是在給定日期和升序中獲得與年份相同的日期列表。日期差異似乎沒有實際計算日期的差異,並給出最近的10個。

我查看了很多帖子,但找不到任何具體的東西來做我需要的東西。

任何幫助將不勝感激。

感謝, Simmy :-)


答案是:

Format sqliteDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

String query2 = 
"SELECT _id, Date " + 
"FROM main " + 
"WHERE Date IS NOT NULL " + 
"ORDER BY ABS(JULIANDAY('" + sqliteDateFormatter.format(aDate) + "') - " + "JULIANDAY(Date)) " + 
"LIMIT 10"; 
+0

SQLite沒有變量。你如何將'givenDate'的值傳遞給查詢? –

+0

我已更新我的原始郵件以顯示givenDate在Android中的傳遞方式。 我已將givenDate更改爲「+ givenDate +」 – Simmy

回答

0

the documentation,只是轉換Date爲字符串將導致不被理解的格式SQLite的;你必須explicitly use the correct format

此外,這些日期值只是字符串,所以你不能簡單地減去它們。您必須先將它們轉換爲some numeric date format

Format sqliteDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String query = ... + 
    "ORDER BY ABS(JULIANDAY('" + sqliteDateFormatter.format(date) + "') - " + 
       "JULIANDAY(Date))" + 
    ... 
+0

感謝您的支持。我在我的代碼中嘗試過,但是當我嘗試運行它時,出現以下錯誤: 11-13 19:11:48.616:E/AndroidRuntime(13804):android.database.sqlite.SQLiteException:near「Date」:語法錯誤(代碼1):,編譯時:SELECT ID,DateFROM mainWHERE日期IS NOT NULLORDER BY ABS(JULIANDAY('1995-10-23 00:00:00') - JULIANDAY(Date))極限10 任何想法? 謝謝, Simmy – Simmy

+0

插入串聯字符串的空間。謝謝, –

+0

謝謝,現在這個作品! :-D 爲了大家的利益,這是我使用的實際代碼: 'Format sqliteDateFormatter = new SimpleDateFormat(「yyyy-MM-dd HH:mm:ss.SSS」); 字符串QUERY2 = \t 「SELECT _id,日期」 + \t 「FROM主」 + \t 「WHERE日期IS NOT NULL」 + \t 「ORDER BY ABS(儒略日('」 + sqliteDateFormatter.format(ADATE)+「 ') - 「+ 」JULIANDAY(Date))「+ \t」LIMIT 10「; ' – Simmy