我正在尝试运行一个查询,该查询将返回按最接近今天的日期排序的行。
以下是一些数据:
| 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
格式的字符串(我没有将其存储为时间戳)。我做错了什么?
答案 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