SQLite 日付 & 時刻

SQLite は以下の5つの日付と時刻関数をサポートしています:

番号関数例
1date(timestring, modifier, modifier, ...)YYYY-MM-DD 形式で日付を返します。
2time(timestring, modifier, modifier, ...)HH:MM:SS 形式で時刻を返します。
3datetime(timestring, modifier, modifier, ...)YYYY-MM-DD HH:MM:SS 形式で返します。
4julianday(timestring, modifier, modifier, ...)これは、グリニッジ標準時の紀元前4714年11月24日正午から数えた日数を返します。
5strftime(format, timestring, modifier, modifier, ...)これは、最初の引数で指定されたフォーマット文字列に従って、フォーマットされた日付を返します。具体的なフォーマットについては下記の説明を参照してください。

上記の5つの日付と時刻関数は、時刻文字列をパラメータとして受け取ります。時刻文字列の後には、0個以上の修飾子(modifier)が続きます。strftime() 関数は、フォーマット文字列 format を最初のパラメータとして受け取ることもできます。以下では、さまざまな種類の時刻文字列と修飾子について詳しく説明します。

時刻文字列

時刻文字列は、以下のいずれかの形式を取ることができます:

番号時刻文字列例
1YYYY-MM-DD2010-12-30
2YYYY-MM-DD HH:MM2010-12-30 12:10
3YYYY-MM-DD HH:MM:SS.SSS2010-12-30 12:10:04.100
4MM-DD-YYYY HH:MM12-30-2010 12:10
5HH:MM12:10
6YYYY-MM-DDTHH:MM2010-12-30 12:10
7HH:MM:SS12:10:01
8YYYYMMDD HHMMSS20101230 121001
9now2013-05-07

日付と時刻を区切る文字として "T" を使用できます。

修飾子(Modifier)

時刻文字列の後には0個以上の修飾子を続けることができ、これにより上記5つの関数が返す日付や時刻が変更されます。上記の5つの関数はいずれも時刻を返します。修飾子は左から右に使用します。以下に、SQLite で使用できる修飾子を示します:

  • NNN days

  • NNN hours

  • NNN minutes

  • NNN.NNNN seconds

  • NNN months

  • NNN years

  • start of month

  • start of year

  • start of day

  • weekday N

  • unixepoch

  • localtime

  • utc

フォーマット

SQLite は非常に便利な関数を提供していますstrftime()あらゆる日付と時刻をフォーマットするためのものです。以下の置換を使用して日付と時刻をフォーマットできます:

置換説明 %d月内の日、01-31 %f小数部を含む秒、SS.SSS %H時、00-23 %j年内の日、001-366 %Jユリウス日、DDDD.DDDD %m月、00-12 %M分、00-59 %s1970-01-01 からの秒数 %S秒、00-59 %w週内の日、0-6(0は日曜日) %W年内の週、01-53 %Y年、YYYY %%% symbol

例

それでは、SQLite プロンプトを使用してさまざまな例を試してみましょう。以下は現在の日付を計算します:

sqlite> SELECT date('now');
2013-05-07

以下は現在の月の最終日を計算します:

sqlite> SELECT date('now','start of month','+1 month','-1 day');
2013-05-31

以下は、指定された UNIX タイムスタンプ 1092941466 の日付と時刻を計算します:

sqlite> SELECT datetime(1092941466, 'unixepoch');
2004-08-19 18:51:06

以下は、指定された UNIX タイムスタンプ 1092941466 をローカルタイムゾーンで表した日付と時刻を計算します:

sqlite> SELECT datetime(1092941466, 'unixepoch', 'localtime');
2004-08-19 11:51:06

以下は現在の UNIX タイムスタンプを計算します:

sqlite> SELECT strftime('%s','now');
1367926057

以下は、アメリカの「独立宣言」が署名されてからの日数を計算します:

sqlite> SELECT julianday('now') - julianday('1776-07-04');
86504.4775830326

以下は、2004年の特定の時刻からの秒数を計算します:

sqlite> SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
295001572

以下は、その年の10月の最初の火曜日の日付を計算します:

sqlite> SELECT date('now','start of year','+9 months','weekday 2');
2013-10-01

以下は、UNIX エポックからの秒単位の時刻を計算します(strftime('%s','now') と似ていますが、小数部分も含まれる点が異なります):

sqlite> SELECT (julianday('now') - 2440587.5)*86400.0;
1367926077.12598

UTC とローカル時刻の値を変換するには、日付をフォーマットするときに utc または localtime 修飾子を次のように使用します:

sqlite> SELECT time('12:00', 'localtime');
05:00:00
sqlite>  SELECT time('12:00', 'utc');
19:00:00
その他の拡張