【问题标题】:Sort Date stored in SQLite database排序存储在 SQLite 数据库中的日期
【发布时间】:2014-01-16 10:21:27
【问题描述】:

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

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

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

SELECT * FROM events ORDER BY start_date

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

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

感谢您的帮助

更新 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);

【问题讨论】:

  • 看看STRFTIME() 函数,它使您能够选择日期的特定部分(小时、完整日期、时间等),然后按此排序。不知道为什么你的不工作。例如。 - SELECT * FROM events ORDER BY strftime('%s', start_date)
  • 谢谢史蒂文,我现在看;)
  • 您可能想检查日期格式?是 mm/dd/yyy 吗?如果是,那么无论您得到什么都是正确的。我认为您不需要使用日期函数按日期列排序
  • @IndoKnight 不,格式为 dd/mm/yyyy HH:mm:SS

标签: sql database sqlite date datetime


【解决方案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

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    相关资源
    最近更新 更多