SQLite
データベース内のすべてのレコードには、'yyyy-MM-dd HH:mm:ss'
形式でDate
として保存されたstring
を含むフィールドが含まれています。
最新の日付を含むレコードを取得するためにデータベースを照会することは可能ですか?
このようにできます
SELECT * FROM Table ORDER BY date(dateColumn) DESC Limit 1
私にとっては、問題を解決するためにこの方法でクエリを作成しました
select * from Table order by datetime(datetimeColumn) DESC LIMIT 1
私は日付列ではなく日付時刻として保存していたので
それをUNIXタイムスタンプに変換してから比較する必要があります。
SELECT * FROM data ORDER BY strftime('%s', date_column) DESC
しかし、行がたくさんある場合、これはかなり遅くなります。より良い方法は、デフォルトでUNIXタイムスタンプを保存し、その列のインデックスを作成することです。
テキストフィールドの形式がyyyy-MM-dd HH:mm:ss
(例:2017-01-02 16:02:55
)、だからそれは単に私のために働く:
SELECT * FROM Table ORDER BY dateColumn DESC Limit 1
追加の日付関数なし!
列「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
私の場合、すべてがうまく動作しますwithoutcasting 'date'を入力する列。列名をdoubleのような引用符で指定するだけで:
SELECT * FROM 'Repair' ORDER BY "Date" DESC;
SQLiteはそれ自体またはそのようなものでキャストを行うと思いますが、自分でDateカラムを「キャスト」しようとしてもうまくいきませんでした。また、エラーメッセージはありませんでした。
多くの日付のソート/比較を行う場合、文字列ではなくティックとして時間を保存することでより良い結果を得ることができます。ティックで「今」を取得する方法を以下に示します。
((strftime('%s', 'now') - strftime('%S', 'now') + strftime('%f', 'now')) * 1000)
( https://stackoverflow.com/a/20478329/460084 を参照)
次に、並べ替え、比較などが簡単です...