2011-06-06 194 views
0

我有一個問題。在我的應用程序中,我在數據庫中保存了一些列表。每個列表都以這種格式與2011年6月6日的日期相關聯。我如何按日期訂購這些清單?我寫了我這樣的功能:按日期排序?

public Cursor getAll(){ 

    return (mDb.rawQuery("SELECT _id, Title, Shop , Data , Budget_allocated ," + 
      " Budget_spent FROM Lists ORDER BY Data",null)); 
} 

但它不能正常工作。我認爲它只是比較一天。例如,如果我有2011年5月31日和2011年6月6日,它會說第一個日期在第二個日期之後。

這可能是我想要做的?我應該如何修改日期格式:6-06-2011?

謝謝..

+0

該列是日期時間列嗎? – 2011-06-06 14:10:58

+0

不,列是字符串 – Gabrielle 2011-06-06 14:14:11

回答

0

我不知道android開發任何東西,但它聽起來像你的日期字段存儲爲一個字符串,而不是一個日期,是正確的?

如果是這樣,您可以:

  • 更改表,以便字段是一個日期(那麼它應該正確地比較)
  • 或者將其存儲在一個標準的格式,默認字符串比較排序日期正確。由於字符串比較首先對第一個字符進行排序,對第二個字符進行第二個排序,這會首先將最大的時間差異,即。 「2011-05-31」(包括零)。

(您應該能夠通過製作新字段,將數據從舊字段以正確格式複製到新字段,然後刪除舊字段並重新命名新字段或更簡單的是,如果你只是想改變文本的格式,你應該可以通過代碼或「更新」查詢AFAIK來做到這一點。)

0

使用日期格式如下... yyyy-MM-dd HH:mm:ss。這保證可以按升序或降序排序。

+0

即使我的山是可能,6月...而不是5,6? – Gabrielle 2011-06-06 14:16:08

+0

@Gaby:不,不要將月份保存爲文本(5月,6月等),以數字形式(05,06)。正如已經提到的那樣,將該列設置爲'datetime'列而不是'varchar',但以我建議的格式(ISO 8601)存儲意味着無論在SQL查詢中處理還是以後處理爲字符串,都可以保證正確的排序。 – Squonk 2011-06-06 14:33:25

0

如果您的Data列不是datetime類型,則可能存在問題。看看此相關的SO問題和答案:

SQL ORDER BY date problem