SQLiteで日付と時刻の型を格納および処理する方法
SQLiteはデータをファイルに格納するデータベースシステムです。モバイルやWebアプリケーションでよく使用される小さな、高速で使いやすいデータベースシステムです。
Officeのドキュメントによると、SQLiteは日付と時刻の型をサポートしていません。日付と時刻のための推奨されるデータ型は次のとおりです:
TEXT
: テキストデータ型で、文字列です。日付と時刻をYYYY-MM-DD HH:MM:SS
などのISO 8601形式の文字列として格納します。INTEGER
: 整数データ型で、整数です。日付と時刻をUTCの1970年1月1日00:00:00以降の秒数として格納します。これはUnixタイムスタンプとしても知られています。REAL
: 実数データ型で、小数点付きの数値です。日付と時刻をUTCの紀元前4714年11月24日12:00:00以降の日数として格納します。これはユリウス日数としても知られています。
どのデータ型を使用すべきですか?
実際には、SQLiteで日付と時刻の種類を格納および処理するために使用する任意の形式を使用できます。最も柔軟なデータ型は TEXT
であり、これは文字列です。
SQLiteがなぜ他の形式ではなくISO 8601形式で日付と時刻を格納および処理するために TEXT
を使用することを提案しているのか?それは、SQLiteにはいくつかの組み込みの日付関連関数があるためです。たとえば、2つの日付間の時間差を計算する timediff
や、日付値をフォーマットする strftime
などがあります。
しかし、本当に TEXT
を使用すると、いくつかの問題に直面する可能性があります:
- フォーマットが期待と異なる場合があり、さまざまな異なるフォーマットが存在します。
- 情報が失われる可能性があります。たとえば、タイムゾーンが含まれていないことがあります。
- 日付と時刻の種類を比較できない場合があります。たとえば、
>
や<
演算子を使用して日付と時刻の種類を比較できません。(一部の形式は比較可能ですが、すべてではありません。)
推奨される方法は、タイムスタンプを格納するために INTEGER
を使用することです。それは単なる数値なので、ストレージが効率的であり、日付と時刻の種類を比較するのが簡単です。
さらに、"タイムゾーンの問題"がないため、世界中の同じ時刻のタイムゾーンはまったく同じです。必要に応じて任意のタイムゾーンにフォーマットし、フォーマットできます。
結論
実際には、SQLiteで日付と時刻の型を処理する際には、タイムスタンプを格納するために INTEGER
を使用する必要があります。