SQLite-日付と時刻

SQLiteは次のように5つの日付と時刻の機能をサポートしています-

Sr.No. Function Example
1 date(timestring, modifiers…​) This returns the date in this format: YYYY-MM-DD
2 time(timestring, modifiers…​) This returns the time as HH:MM:SS
3 datetime(timestring, modifiers…​) This returns YYYY-MM-DD HH:MM:SS
4 julianday(timestring, modifiers…​) This returns the number of days since noon in Greenwich on November 24, 4714 B.C.
5 strftime(timestring, modifiers…​) This returns the date formatted according to the format string specified as the first argument formatted as per formatters explained below.

上記の5つの日付および時刻関数はすべて、引数として時刻文字列を取ります。 時間文字列の後には、ゼロ個以上の修飾子が続きます。 strftime()関数は、最初の引数としてフォーマット文字列も受け取ります。 次のセクションでは、さまざまなタイプの時間文字列と修飾子について詳しく説明します。

タイムストリング

時間文字列は、次の形式のいずれかにすることができます-

Sr.No. Time String Example
1 YYYY-MM-DD 2010-12-30
2 YYYY-MM-DD HH:MM 2010-12-30 12:10
3 YYYY-MM-DD HH:MM:SS.SSS 2010-12-30 12:10:04.100
4 MM-DD-YYYY HH:MM 30-12-2010 12:10
5 HH:MM 12:10
6 YYYY-MM-DDTHH:MM 2010-12-30 12:10
7 HH:MM:SS 12:10:01
8 YYYYMMDD HHMMSS 20101230 121001
9 now 2013-05-07

日付と時刻を区切るリテラル文字として「T」を使用できます。

修飾子

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

次の修飾子はSQLiteで利用可能です-

  • NNN日
  • NNN時間
  • NNN分
  • NNN.NNNN秒
  • NNNか月
  • NNN年
  • 月の始まり
  • 年の初め
  • 一日の始まり
  • 平日N
  • ユニセポック
  • 現地時間
  • utc

フォーマッター

SQLiteは、日付と時刻をフォーマットするための非常に便利な関数* strftime()*を提供します。 次の置換を使用して、日付と時刻をフォーマットできます。

置換

説明

%d

月の日、01-31

%f

小数秒、SS.SSS

%H

時、00-23

%j

年の日、001-366

%J

ユリウス日、DDDD.DDDD

%m

月、00-12

%M

分、00-59

%s

1970-01-01からの秒数

%S

秒、00-59

%w

曜日、0〜6(0は日曜日)

%W

年の週、01-53

%Y

年、YYYY

%%

%記号

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 13:51:06

次のコマンドは、現在のUNIXタイムスタンプを計算します。

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

次のコマンドは、米国独立宣言に署名してからの日数を計算します。

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

次のコマンドは、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