前回はSQLiteでの日付の表し方だったけど、今度は日付を用いた計算をしてみよう。
オプション引数は何個でもつけることができるので、3ヶ月先の月の末日を求めたい場合は以下のようになる。
残念ながら、'end of month'はないので、4ヶ月先の月の最初の日を求めて、1日引くことになる。
単純に文字列形式で差を取ってもダメなので、一旦ユリウス通日かUnix時間に変換して、差を取るようにする。
秒数差を取りたいのであれば、Unix時間の方が便利。
SQL As Understood By SQLite Date And Time Functions
日付の足し引き
1年以上前のデータを削除するような場面では現在から1年前の日付が必要になる。sqlite> select date('now', 'localtime'); 2017-07-09 sqlite> select date('now', 'localtime', '-1 year'); 2016-07-09
オプション引数は何個でもつけることができるので、3ヶ月先の月の末日を求めたい場合は以下のようになる。
sqlite> select date('now', 'localtime', '+4 months', 'start of month', '-1 day'); 2017-10-31
残念ながら、'end of month'はないので、4ヶ月先の月の最初の日を求めて、1日引くことになる。
日付間の日数
日付間の日数を算出したい場合はどうだろうか。sqlite> select date('2017-08-01') - date('2017-05-20'); 0
単純に文字列形式で差を取ってもダメなので、一旦ユリウス通日かUnix時間に変換して、差を取るようにする。
sqlite> select julianday('2017-08-01') - julianday('2017-05-20'); 73.0 sqlite> select cast(julianday('2017-08-01') - julianday('2017-05-20') as integer); 73
秒数差を取りたいのであれば、Unix時間の方が便利。
sqlite> select strftime('%s', '2017-08-01 12:38:21') - strftime('%s', '2017-07-30 09:08:56'); 185365
SQL As Understood By SQLite Date And Time Functions
0 件のコメント:
コメントを投稿