【问题标题】:Ordering dates descending in sqlite在 sqlite 中降序排序日期
【发布时间】:2014-12-03 13:08:55
【问题描述】:

我在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

所以我尝试在查询中将 desc 替换为 asc,但得到的结果完全相同。

我怎样才能得到正确的订单?

【问题讨论】:

  • SQLite 没有真正的数据类型date。您基本上可以将所有内容存储在 date 列中,并且始终按字母顺序进行排序,而不是基于“真实”日期值。
  • 那么为什么 '06 Oct. 2014 15-40-22' 会出现在 '11 Sep. 2014 13-59-07' 之后呢?
  • 按日期时间(CREATION_DATE) DESC 排序
  • 我试过了,还是不行。

标签: sqlite


【解决方案1】:

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

可以使用substr() 提取日期字段,并使用CASE 将月份字符串替换为可排序的数字,但最好将值以适当的格式存储在数据库中首先。

【讨论】:

  • 就是这样。编写应用程序代码的人使用一种奇怪的格式将日期放入数据库中。日期是通过 JDBC 使用 setString 和这种奇怪的格式插入的。现在,使用 setDate 可以正确存储它们并且可以订购。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
相关资源
最近更新 更多