2

この形式のDD-MM-YYYYで、日付を文字列としてデータベースに保存しています。

日付列にオーダーバイを使用して選択クエリを作成しようとしたとき。期待した結果が得られませんでした。

結果の例: 28/02/2013 27/02/2013 01/03/2013

私のSQLクエリ:

SELECT * FROM data ORDER BY strftime('%s', date_column)

ありがとうございました。

4

5 に答える 5

7

問題は、日付をDD-MM-YYYY文字列として保存することです。これにより、日付を文字列として自然に並べ替えるだけでなく、SQLiteの日付と時刻の関数で日付を解析することもできなくなります。リンクをクリックして、[時間文字列]セクションまで下にスクロールします。

SQLiteは、日付/時刻文字列を自然な順序で、最上位桁から最下位桁、つまりYYYY-MM-DDであると想定しています。文字列操作を使用して、DD-MM-YYYY文字列をその形式に変換できます。例えば:

select 
  substr(reversed_date, 7,4) || '-' || 
  substr(reversed_date, 4, 2)|| '-' ||
  substr(reversed_date, 1, 2) as proper_date
  from (
    select '12-03-2000' as reversed_date
  )
;

日付列をこの形式に変換するか(@petermが示唆するように)、の値を使用しproper_dateて並べ替えることができます。そのために使用する必要はありませんがstrftime、日付関連の関数はそのような値で機能します。

于 2013-03-05T21:33:49.850 に答える
4

私見あなたはあなたが日付を保存するフォーマットを変更する必要があります

DD-MM-YYYY

YYYY-MM-DD

ドキュメントから

時間 文字列時間文字列は、次のいずれかの形式にすることができます
。YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY -MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
..。

次に、元のクエリとこれが期待どおりに機能します

SELECT * FROM Table1 ORDER BY date(date_column);
SELECT * FROM Table1 ORDER BY strftime('%s', date_column);

出力:

| date_column |
---------------
|  2013-02-27 |
|  2013-02-28 |
|  2013-03-01 |

sqlfiddle

于 2013-03-05T21:23:59.147 に答える
2

ドキュメントによると、次のように動作するはずです

SELECT * 
FROM data 
ORDER BY strftime('%Y-%m-%d', date_column)
于 2013-03-05T21:15:25.410 に答える
0

試す:

SELECT * FROM data ORDER BY to_date(date_column)

日付比較ではなく文字列比較を行うため、おそらくこれで問題が解決する可能性があります。

2013 年 1 月 3 日は、2013 年 2 月 28 日または 2013 年 2 月 27 日よりも小さく表示されます

したがって、出力は次のとおりです。

2013 年 3 月 1 日、2013 年 2 月 27 日、2013 年 2 月 28 日

于 2013-03-05T21:20:21.007 に答える