0

私の日付は標準形式ではありません。2013 年 7 月 15 日 06:53:05 であり、データベースに文字列として格納されます。日付順に並べ替えるにはどうすればよいですか。

このクエリは機能していません。

SELECT jobno, ondate FROM Reports ORDER BY DATE(ondate)

このクエリを実行すると、日付順ではなくアルファベット順に並べ替えられます。

4

2 に答える 2

2

ここに書かれているように、SQLite には日付型がないため、次のようにできます。

SELECT jobno, ondate
FROM Reports
ORDER BY substr(ondate,7)||substr(ondate,1,2)||substr(ondate,4,2)

sql fiddle demo

于 2013-09-07T22:48:05.157 に答える
1

これが、この形式がSQLite で推奨される日付/時刻ストレージ メカニズムではない理由です。

を使用strftimeして、データを適切に順序付けできるものに変換できます (アメリカ風のフォーマット文字列を指定するだけでよいことに注意してください)。

SELECT jobno, ondate FROM Reports
ORDER BY strftime('%m/%d/%Y %H:%M:%S', ondate)

ただし、このアプローチ(および他の回答のアプローチ)はインデックスを使用できず大きなデータのパフォーマンスが低下する可能性があります。

SQLite Datatypes: 1.2 Date and Time Datatypeからのアドバイスは次のとおりです。

SQLite には、日付や時刻を格納するためのストレージ クラスが用意されていません。代わりに、SQLite の組み込みの日付と時刻関数は、日付と時刻を TEXT、REAL、または INTEGER 値として格納できます。

  • ISO8601 文字列としての TEXT ("YYYY-MM-DD HH:MM:SS.SSS")。
  • ユリウス日としての REAL。先発グレゴリオ暦による紀元前 4714 年 11 月 24 日のグリニッジ正午からの日数。
  • UNIX 時間としての INTEGER、1970-01-01 00:00:00 UTC からの秒数。

ISO 8601を使用することをお勧めします。ISO 8601は依然として人間が判読可能であり、十分に理解されており (そしてカルチャに中立であり)、TZ をエンコードでき (一貫性を保てます!)、適切にインデックス化できるからです。

于 2013-09-07T22:46:43.060 に答える