web-dev-qa-db-ja.com

SQLite Order By Date1530019888000

SQLiteデータベース内のすべてのレコードには、'yyyy-MM-dd HH:mm:ss'形式でDateとして保存されたstringを含むフィールドが含まれています。

最新の日付を含むレコードを取得するためにデータベースを照会することは可能ですか?

62
duncanportelli

このようにできます

SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
131
paritosh

私にとっては、問題を解決するためにこの方法でクエリを作成しました

select *  from Table order  by datetime(datetimeColumn) DESC LIMIT 1

私は日付列ではなく日付時刻として保存していたので

40
Ahmad Baraka

それをUNIXタイムスタンプに変換してから比較する必要があります。

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

しかし、行がたくさんある場合、これはかなり遅くなります。より良い方法は、デフォルトでUNIXタイムスタンプを保存し、その列のインデックスを作成することです。

5
Zaffy

テキストフィールドの形式がyyyy-MM-dd HH:mm:ss(例:2017-01-02 16:02:55)、だからそれは単に私のために働く:

SELECT * FROM Table ORDER BY dateColumn DESC Limit 1

追加の日付関数なし!

4
Nabi K.A.Z.

列「sent_date_time」をyyyy-MM-dd形式に変換してから、日付順に並べ替えることができます

1 ) substr(sent_date_time,7,4)||"-"||substr(sent_date_time,1,2)||"-"||substr(sent_date_time,4,2) as date
2) order by date desc
3
bpatel

私の場合、すべてがうまく動作しますwithoutcasting 'date'を入力する列。列名をdoubleのような引用符で指定するだけで:

SELECT * FROM 'Repair' ORDER BY "Date" DESC;

SQLiteはそれ自体またはそのようなものでキャストを行うと思いますが、自分でDateカラムを「キャスト」しようとしてもうまくいきませんでした。また、エラーメッセージはありませんでした。

1
user3765475

多くの日付のソート/比較を行う場合、文字列ではなくティックとして時間を保存することでより良い結果を得ることができます。ティックで「今」を取得する方法を以下に示します。

((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000)

https://stackoverflow.com/a/20478329/460084 を参照)

次に、並べ替え、比較などが簡単です...

0
kofifus