2014-12-03 83 views
1

降我有以下表中的SQLite:訂購日期SQLite中

CREATE TABLE LICENSE (OBJECT_ID   INTEGER PRIMARY KEY AUTOINCREMENT, 
         LICENSE    BLOB NOT NULL, 
         NAME    VARCHAR(255), 
         TYPE    VARCHAR(255) NOT NULL, 
         EXPIRATION_DATE  DATE, 
         CREATION_DATE  DATE NOT NULL) 

我想顯示所有許可證,從最近的命令他們最古老的一個。我用這個簡單的查詢:

SELECT * FROM license order by date(CREATION_DATE) desc 

令人驚訝的結果是這樣的(我只告訴你的CREATION_DATE列):

11 Sep. 2014 13-59-07 
17 Sep. 2014 15-39-26 
17 Sep. 2014 17-48-05 
18 Sep. 2014 09-59-49 
06 Oct. 2014 15-18-44 
06 Oct. 2014 15-40-22 

所以我已經試圖通過ASC在我的查詢,但我更換說明得到相同的結果。

如何獲得正確的訂單?

+0

SQLite沒有真正的數據類型「日期」。您可以基本上將所有內容存儲在「日期」列中,排序總是按字母順序進行,而不是基於「實際」日期值。 – 2014-12-03 13:23:54

+0

那麼爲什麼'06 2014年10月15-40-22'會在'11 Sep. 2014 13-59-07'之後? – StephaneM 2014-12-03 13:50:29

+0

order by datetime(CREATION_DATE)DESC – 2014-12-03 14:56:08

回答

1

這些字符串不在supported date formats之一。

可能使用substr()來提取日期字段和CASE,以便用可排序的數字替換月份字符串,但最好是在第一個數據庫中以正確的格式存儲這些值地點。

+0

就是這樣。編寫應用程序的人使用奇怪的格式將日期放入數據庫中。日期是通過JDBC使用setString和這種奇怪的格式插入的。現在,使用setDate它們被正確存儲並且可以被訂購。 – StephaneM 2014-12-04 09:36:38