SQLite 日付 & 時刻
SQLite は以下の5つの日付と時刻関数をサポートしています:
| 番号 | 関数 | 例 |
|---|---|---|
| 1 | date(timestring, modifier, modifier, ...) | YYYY-MM-DD 形式で日付を返します。 |
| 2 | time(timestring, modifier, modifier, ...) | HH:MM:SS 形式で時刻を返します。 |
| 3 | datetime(timestring, modifier, modifier, ...) | YYYY-MM-DD HH:MM:SS 形式で返します。 |
| 4 | julianday(timestring, modifier, modifier, ...) | これは、グリニッジ標準時の紀元前4714年11月24日正午から数えた日数を返します。 |
| 5 | strftime(format, timestring, modifier, modifier, ...) | これは、最初の引数で指定されたフォーマット文字列に従って、フォーマットされた日付を返します。具体的なフォーマットについては下記の説明を参照してください。 |
上記の5つの日付と時刻関数は、時刻文字列をパラメータとして受け取ります。時刻文字列の後には、0個以上の修飾子(modifier)が続きます。strftime() 関数は、フォーマット文字列 format を最初のパラメータとして受け取ることもできます。以下では、さまざまな種類の時刻文字列と修飾子について詳しく説明します。
時刻文字列
時刻文字列は、以下のいずれかの形式を取ることができます:
| 番号 | 時刻文字列 | 例 |
|---|---|---|
| 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 | 12-30-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" を使用できます。
修飾子(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 | %s | 1970-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
その他の拡張