查找最近的日期

时间:2012-12-28 20:59:22

标签: sqlite

我正在尝试运行一个查询,该查询将返回按最接近今天的日期排序的行。

以下是一些数据:

|   date   |
|----------|
|2012-12-02|
|2012-12-04|
|2012-12-10|
|2012-12-15|
|2012-12-29|
|2013-01-02|
|2013-01-04|

这是我的问题:

SELECT * FROM days
    ORDER BY ABS( strftime( "%s", date ) - strftime( "%s", 2012-12-28 ) ) ASC

它只是按照我上面发布的相同顺序返回行,我想得到像

这样的结果
|   date   |
|----------|
|2012-12-29|
|2013-01-02|
|2013-01-04|
|2012-12-15|
|2012-12-10|
|2012-12-04|

我的日期字段是yyyy-MM-dd格式的字符串(我没有将其存储为时间戳)。我做错了什么?

2 个答案:

答案 0 :(得分:3)

代码上似乎有一个错误:

SELECT * FROM days
    ORDER BY ABS( strftime( "%s", date ) - strftime( "%s", 2012-12-28 ) ) ASC

以这种方式编写,查询将显示按日期排序的结果。

原因:2012-12-28将被视为整数之间的算术运算。您应该写'2012-12-28',以表明这是date

答案 1 :(得分:1)

你不必使用strftime。

SELECT * FROM days
 WHERE date <= '2012-12-28'
    ORDER BY date ASC
    -- LIMIT 5