0

My date is not in standard form. This is how it is: 07/15/2013 06:53:05 and is stored as string in the database. How can I query it to order it by date.

This query is not working.

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

When I run this query it orders it alphabetically and not date wise.

4

2 回答 2

2

如此处所写,SQLite 没有日期类型,因此您可以这样做:

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

sql fiddle demo

于 2013-09-07T22:48:05.157 回答
1

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

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

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 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

推荐使用ISO 8601,因为它仍然是人类可读的,易于理解(和文化中立),可以对 TZ 进行编码(只要保持一致!),并且可以很好地被索引。

于 2013-09-07T22:46:43.060 回答