概要
SQLiteで時間の計算をするにはtime()、もしくはdatetime()を使用する。
なお、time()の結果は時間部分だけではなく日付部分を持っており、必ず2000年1月1日になる。
構文
time(value, modifier, modifier, ...)
datetime(value, modifier, modifier, ...)
実行例
環境
- Windows 10 64bit
- SQLite3 ver.3.37.0
時(hours)の計算
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
分(minutes)の計算
time()やdatetime()の引数にNNN minutesを追加する。
例えば1分後を計算したければ+1 minutesを追加する。
時(hours)を跨ぐ計算もしてくれる。
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
秒(seconds)とミリ秒(milliseconds)の計算
time()や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日」になるので注意すること。
参考URL
-
SQLite Query Language: Date And Time Functions(英語)
公式の日時型に関するドキュメント
https://www.sqlite.org/lang_datefunc.html