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 に答える