概要
SQLiteで時間の計算をするには「time()」、もしくは「datetime()」を使用する。
なお、「time()」の結果は時間部分だけではなく日付部分を持っており、必ず2000年1月1日になる。
構文
time(time-value, modifier, modifier, ...)
datetime(time-value, modifier, modifier, ...)
実行例
環境
- Windows 10 64bit
- SQLite3 ver.3.37.0
時の計算
「time()」や「datetime()」の引数に「NNN hours」を追加する。
例えば1時間後を計算したければ「+1 hours」を追加する。
「datetime()」であれば日を跨ぐ計算もしてくれる。
「time()」の場合は日を跨ぐ計算をしても、2000年1月1日の扱いになる。
sqlite> select time('09:00:00', '+1 hours');
10:00:00
sqlite> select time('09:00:00', '-1 hours');
08:00:00
sqlite> select time('23:00:00', '+2 hours');
01:00:00
sqlite> select time('01:00:00', '-2 hours');
23:00:00
sqlite> select datetime('2021-01-01 09:00:00', '+1 hours');
2021-01-01 10:00:00
sqlite> select datetime('2021-01-01 09:00:00', '-1 hours');
2021-01-01 08:00:00
sqlite> select datetime('2021-01-01 23:00:00', '+2 hours');
2021-01-02 01:00:00
sqlite> select datetime('2021-01-01 01:00:00', '-2 hours');
2020-12-31 23:00:00
「time()」の結果は何をしても2000年1月1日になる
sqlite> select datetime(time('23:00:00', '+2 hours'));
2000-01-01 01:00:00
sqlite> select datetime(time('2021-09-01 23:00:00', '+2 hours'));
2000-01-01 01:00:00
sqlite> select datetime(time('2021-09-01 01:00:00', '-2 hours'));
2000-01-01 23:00:00
分の計算
「date()」や「datetime()」の引数に「NNN minutes」を追加する。
例えば1分後を計算したければ「+1 minutes」を追加する。
時を跨ぐ計算もしてくれる。
sqlite> select time('09:05:00', '+1 minutes');
09:06:00
sqlite> select time('09:05:00', '-1 minutes');
09:04:00
sqlite> select time('09:59:00', '+2 minutes');
10:01:00
sqlite> select time('10:01:00', '-2 minutes');
09:59:00
sqlite> select datetime('2021-01-01 09:05:00', '+1 minutes');
2021-01-01 09:06:00
sqlite> select datetime('2021-01-01 09:05:00', '-1 minutes');
2021-01-01 09:04:00
秒、ミリ秒の計算
「date()」や「datetime()」の引数に「NNN.NNNN seconds」を追加する。
例えば1秒後を計算したければ「+1 seconds」を追加する。
分を跨ぐ計算もしてくれる。
なお、ミリ秒は切り捨てられる。
sqlite> select time('09:00:05', '+1 seconds');
09:00:06
sqlite> select time('09:00:05', '-1 seconds');
09:00:04
sqlite> select datetime('09:00:05', '+1 seconds');
2000-01-01 09:00:06
sqlite> select datetime('09:00:05', '-1 seconds');
2000-01-01 09:00:04
sqlite> select time('09:00:59', '+2 seconds');
09:01:01
sqlite> select time('09:00:01', '-2 seconds');
08:59:59
sqlite> select time('09:00:05', '+00.0001 seconds');
09:00:05
sqlite> select time('09:00:05.9999', '+0.0002 seconds');
09:00:05
selectの結果で日付を計算する
上記の通り、時間を計算するには「time()」や「datetime()」の引数に文字列を指定する必要がある。 データベース内のデータで計算する場合、文字列を連結して引数を作ってやればいい。
他のテーブルのデータを利用する場合はテーブルを結合する。
以下は「num」カラムの値を「time」カラムの秒に足す例。
str_time text |
int_num integer |
---|---|
09:01:01 | 1 |
09:01:01 | 2 |
09:01:01 | 3 |
sqlite> select
...> time(
...> str_time
...> , '+' || int_num || ' seconds'
...> )
...> from
...> time_list
...> ;
09:01:02
09:01:03
09:01:04
時間のフォーマットをdateやdatetimeの引数に指定すると、必ず「2000年1月1日」になるので注意すること。
外部参考サイト
-
SQLite Query Language: Date And Time Functions(英語)
公式の日時型に関するドキュメント
https://www.sqlite.org/lang_datefunc.html