SQLiteには日付型というものがありません。
そのため、テキスト型のフィールドに日付を格納するのが通例です。
日付処理関数
SQLiteはテキスト型の日付(timestring)を処理するための5つの日付処理関数を備えています。
- strftime()
- date()
- time()
- datetime()
- julianday()
strftime()はもっとも汎用的な日付処理関数で、残り4つの関数はstrftime()の特定フォーマットを別関数として切り出したものとなっています。
date(timestring, …) = strftime(‘%Y-%M-%D’, timestring, …)
time(timestring, …) = strftime(‘%H:%M:%S’, timestring, …)
datetime(timestring, …) = strftime(‘%Y-%M-%D %H:%M:%S’, timestring, …)
julianday(timestring, …) = strftime(‘%J’, timestring, …)
これらの関数が認識可能な形式(timestring)は以下のようになります。
timestring
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 | 年-月-日T時:分 |
YYYY-MM-DDTHH:MM:SS | 年-月-日T時:分:秒 |
YYYY-MM-DDTHH:MM:SS.SSS | 年-月-日T時:分:秒.マイクロ秒 |
HH:MM | 時:分 |
HH:MM:SS | 時:分:秒 |
HH:MM:SS.SSS | 時:分:秒.マイクロ秒 |
now | 現在時刻 |
DDDDDDDDDD | ユリウス暦日または Unix タイムスタンプ |
format
日付関数にはtimestringとともに、日付の書式を表す「format」を渡します。
%d | 月における日 (00-31) |
%f | 秒とマイクロ秒 (SS.SSS) |
%H | 時間 (00-24) |
%j | 年における日 (001-366) |
%J | ユリウス暦日 |
%m | 月 (01-12) |
%M | 分 (00-59) |
%s | 1970-01-01 00:00 UTC を起点とする秒 |
%S | 秒 (00-59) |
%w | 週の日 (0-6, 0 は日曜) |
%W | 年における週 (00-53) |
%Y | 年 (0000-9999) |
%% | % そのもの |
modifier
SQLiteの日付処理関数ではmodfierによって、加減算、変換、特定日付の取得などができるようになっています。
加減算
1.NNN days
2.NNN hours
3.NNN minutes
4.NNN.NNNN seconds
5.NNN months
6.NNN years
年始、月始、日始(0時)
7.start of month
8.start of year
9.start of day
その他変換
10.weekday N 次の○曜日。N={0:日曜日, 1:月曜日…}
11.unixepoch timestring を Unix タイムスタンプとして扱います。unixepoch を指定せずに DDDDDDDDDD 形式の timestring を渡すと、ユリウス暦日として処理されます。
12.localtime 渡された timestring を UTC での日時と解釈し、TZ 環境変数などで指定されたローカルのタイムゾーンに変換します
13.utc 渡された timestring をローカルタイムゾーンでの日時と解釈し、UTC に変換します
参考
http://www.tamandua-webtools.net/sqlite3-date.html
http://www.dbonline.jp/sqlite/function/index6.html