SQLite按日期排序

时间:2013-09-07 22:43:12

标签: sql sqlite

我的日期不是标准格式。它是这样的:07/15/2013 06:53:05并以字符串形式存储在数据库中。 如何查询它按日期订购。

此查询无效。

SELECT jobno, ondate FROM Reports ORDER BY DATE(ondate)

当我运行此查询时,它按字母顺序排序,而不是按日期排序。

2 个答案:

答案 0 :(得分:2)

正如这里所写,SQLite doesn't have a date type,所以你可以这样做:

SELECT jobno, ondate
FROM Reports
ORDER BY substr(ondate,7)||substr(ondate,1,2)||substr(ondate,4,2)

sql fiddle demo

答案 1 :(得分:1)

这就是为什么这种格式是SQLite推荐的日期/时间存储机制。

您可以使用strftime将数据转换为可以有序排列的内容(请注意,我们只需指定American-ish格式字符串),例如

SELECT jobno, ondate FROM Reports
ORDER BY strftime('%m/%d/%Y %H:%M:%S', ondate)

然而,这种方法(以及其他答案中的方法)将能够使用索引并且大数据上的性能可能会受到影响 < /强>!

来自SQLite Datatypes: 1.2 Date and Time Datatype的建议是:

  

SQLite没有预留用于存储日期和/或时间的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为TEXT,REAL或INTEGER值:

     
      
  • TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  •   
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  •   
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。
  •   

推荐使用ISO 8601,因为它仍然是人类可读的,很容易理解(和文化中立),可以编码TZ(只是一致!),并且可以编入索引好。