2022年2月12日土曜日

SQLite3 年内週を取得する (strftime('%W', 'yyyy-MM-dd'))

概要

strftime()を使用すれば、指定した日付が年内の何週目かを取得できる。

1月1日が必ず第1週になるわけではないことに注意すること。

構文

strftime()は第一引数に日時から取得する要素の変数を、第二引数に実際の日時を指定することで 日時を自由な文字列フォーマットに変換して出力することができる。


strftime(format, datetime)
                    

日時として指定出来る文字列はdate()やdatetime()に指定する文字列と同じ。

年内週を取得するにはstrftime()の第一引数に「%W」を指定する。 小文字の「%w」では無く大文字の「%W」を指定すること。

実行例

環境
  • Windows 10 64bit
  • SQLite3 ver.3.37.0

sqlite> select strftime('%W', '2022-02-09');
06
sqlite> select strftime('%W', date('2022-02-09'));
06
sqlite> select strftime('%W', datetime('2022-02-09'));
06
                    

月曜日が基準になっている

SQLiteでの年内週の数え方は1月1日以降の月曜日の数となる。

以下は2018年と2019年の比較。 月曜日で+1されていることがわかる。

2018年
1月
日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

sqlite> select strftime('%W', '2018-01-01');
01
sqlite> select strftime('%W', '2018-01-02');
01
sqlite> select strftime('%W', '2018-01-07');
01
sqlite> select strftime('%W', '2018-01-08');
02
sqlite> select strftime('%W', '2018-01-09');
02
sqlite> select strftime('%W', '2018-01-14');
02
sqlite> select strftime('%W', '2018-01-15');
03
sqlite> select strftime('%W', '2018-01-16');
03
                        
2019年
1月
日曜日 月曜日 火曜日 水曜日 木曜日 金曜日 土曜日
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

sqlite> select strftime('%W', '2019-01-01');
00
sqlite> select strftime('%W', '2019-01-06');
00
sqlite> select strftime('%W', '2019-01-07');
01
sqlite> select strftime('%W', '2019-01-08');
01
sqlite> select strftime('%W', '2019-01-13');
01
sqlite> select strftime('%W', '2019-01-14');
02
sqlite> select strftime('%W', '2019-01-15');
02
                        

外部参考サイト