排序日期存储在SQLite数据库中

时间:2014-01-16 10:21:28

标签: sql database sqlite date datetime

我正在使用SQLite数据库(不是我的),我必须按日期排序一些数据。

我在网上做了很多搜索但没找到解决方案!
日期字段的类型为“日期”,格式为:DD/MM/YYYY HH:mm:SS

我尝试了很多函数,比如strftime,datetime,date,......但我无法正确排序日期。 例如,如果我这样做:

SELECT * FROM events ORDER BY start_date

日期04/10/2013 00:00:00是在2013年12月3日之后......你知道我的意思吗?

我真的不知道如何以这种格式排序。

感谢您的帮助

更新1:

我试过这样的事情:

SELECT start_date FROM events ORDER BY strftime('%d/%m/%Y %H:%M:%S', start_date)

这是正确的方法吗? 结果:没有错误,但没有任何改变。日期没有排序。

更新2:

laalto的解决方案:

select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12);

1 个答案:

答案 0 :(得分:1)

最好的方法是在插入阶段对数据进行排序,例如通过插入ISO-8601标记或unixtime整数,但由于它不是您的数据库,我们假设您不能影响它。

您可以使用substr()从日期时间字符串中提取部分并构建例如一个ISO-8601日期时间字符串,您可以按字典顺序排序,从而按时间顺序排列。

示例:

sqlite> create table tab(col);
sqlite> insert into tab values('04/10/2013 00:00:00'),('03/12/2013 00:00:00');
sqlite> select substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12) as date from tab order by date;
2013-10-04T00:00:00
2013-12-03T00:00:00
sqlite> select * from tab order by substr(col,7,4)||'-'||substr(col,4,2)||'-'||substr(col,1,2)||'T'||substr(col,12);
04/10/2013 00:00:00
03/12/2013 00:00:00