2014-12-03 87 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