SQLite-日付と時刻
SQLiteは次の5つの日付と時刻の関数をサポートしています-
| シニア番号 | 関数 | 例 | 
|---|---|---|
| 1 | date(timestring、modifiers ...) | これにより、日付が次の形式で返されます:YYYY-MM-DD | 
| 2 | time(timestring、modifiers ...) | これにより、時刻がHH:MM:SSとして返されます。 | 
| 3 | datetime(timestring、modifiers ...) | これはYYYY-MM-DDHH:MM:SSを返します | 
| 4 | ユリウス日(タイムストリング、修飾子...) | これは、紀元前4714年11月24日のグリニッジの正午からの日数を返します。 | 
| 5 | strftime(timestring、modifiers ...) | これは、以下で説明するフォーマッタに従ってフォーマットされた最初の引数として指定されたフォーマット文字列に従ってフォーマットされた日付を返します。 | 
上記の5つの日付と時刻の関数はすべて、引数として時間文字列を取ります。時間文字列の後には、0個以上の修飾子が続きます。strftime()関数も、最初の引数としてフォーマット文字列を取ります。次のセクションでは、さまざまなタイプの時間文字列と修飾子について詳しく説明します。
時間文字列
時間文字列は、次のいずれかの形式にすることができます-
| シニア番号 | 時間文字列 | 例 | 
|---|---|---|
| 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 | 2010年12月30日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 | 今 | 2013-05-07 | 
「T」は、日付と時刻を区切るリテラル文字として使用できます。
修飾子
時間文字列の後には、上記の5つの関数のいずれかによって返される日付や時刻を変更する0個以上の修飾子を続けることができます。修飾子は左から右に適用されます。
次の修飾子はSQLiteで利用できます-
- NNN日
- NNN時間
- NNN分
- NNN.NNNN秒
- NNNか月
- NNN年
- 月の初め
- 年の初め
- 一日の始まり
- 平日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 | 
| %% | %記号 | 
例
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:00sqlite> SELECT time('12:00', 'utc');
19:00:00