概要
SQLite ではdate関数等の結果を加減算しても期待するような結果にはならない。
二つの日付間の日数を計算するにはユリウス通日を利用する必要がある。
実行例
環境
- Windows 10
- sqlite Command-Line Shell ver 3.40.1
単純な日付型の加減算では計算出来ない
date()や
datetime()の加減算では計算出来ず、以下のような結果になる。
sqlite> select date('2023-01-31') - date('2022-12-31');
1
sqlite> select datetime('2023-01-31 09:00:00') - datetime('2022-12-31 09:00:00');
1
期間(日数)を計算するにはユリウス通日を使用する
sqlite> select julianday('2023-01-31') - julianday('2022-12-31');
31.0
このままだと小数点が邪魔なため、cast()関数で整数に変換する。
sqlite> select cast(julianday('2023-01-31') - julianday('2022-12-31') as integer);
31
参考URL
-
SQLite Query Language: Date And Time Functions(英語)
公式の日時型に関するドキュメント
https://www.sqlite.org/lang_datefunc.html -
SQLite備忘録: SQLite 3 で日付型の加減算を行う
https://sfnovicenotes.blogspot.com/2021/12/sqlite3_18.html