3

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

这是一些数据:

| 日期 |
|-----------|
|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

它只是以我在上面发布的相同顺序返回行,我想得到类似的结果

| 日期 |
|-----------|
|2012-12-29|
|2013-01-02|
|2013-01-04|
|2012-12-15|
|2012-12-10|
|2012-12-04|

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

4

2 回答 2

3

代码似乎有错误:

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

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

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

于 2012-12-28T21:11:55.363 回答
1

您不必使用 strftime。

SELECT * FROM days
 WHERE date <= '2012-12-28'
    ORDER BY date ASC
    -- LIMIT 5
于 2014-08-26T17:07:15.227 回答