2022年2月5日土曜日

SQLite3 日付から曜日を取得する (strftime('%w', 'yyyy-MM-dd'))

概要

SQLite3で日付から曜日を取得するにはstrftime()関数を使用する。

構文

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


strftime(format, datetime)
                    

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

曜日を取得するにはstrftime()の第一引数に「%w」を指定する。 返り値は0から6までの値となり、これが日曜日~月曜日を指す。

返り値 曜日
0 日曜日
1 月曜日
2 火曜日
3 水曜日
4 木曜日
5 金曜日
6 土曜日

実行例

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

sqlite> select strftime('%w', '2022-01-01');
6
sqlite> select strftime('%w', '2022-01-02');
0
sqlite> select strftime('%w', '2022-01-03');
1
sqlite> select strftime('%w', '2022-01-04');
2
sqlite> select strftime('%w', '2022-01-05');
3
sqlite> select strftime('%w', '2022-01-06');
4
sqlite> select strftime('%w', '2022-01-07');
5
                    

曜日の名前を取得したい

strftime()関数で曜日が数字として取得出来るので、 これを曜日名に直すにはCASE文などを利用して条件分岐してやればいい。

なお、strftime()の戻り値は数値型ではなく文字列型として比較すること。

sample_date
id str_date
A 2022-01-01
B 2022-01-02
C 2022-01-03
D 2022-01-04
E 2022-01-05
F 2022-01-06
G 2022-01-07

sqlite> .mode box
sqlite> select
   ...>     id
   ...>     , case strftime('%w', str_date)
   ...>         when '0' then 'Sunday'
   ...>         when '1' then 'Monday'
   ...>         when '2' then 'Tuesday'
   ...>         when '3' then 'Wednesday'
   ...>         when '4' then 'Thursday'
   ...>         when '5' then 'Friday'
   ...>         when '6' then 'Saturday'
   ...>         else 'undefined'
   ...>     end as weekday
   ...> from
   ...>     sample_date
   ...> ;
┌────┬───────────┐
│ id │  weekday  │
├────┼───────────┤
│ A  │ Saturday  │
│ B  │ Sunday    │
│ C  │ Monday    │
│ D  │ Tuesday   │
│ E  │ Wednesday │
│ F  │ Thursday  │
│ G  │ Friday    │
└────┴───────────┘
                    

外部参考サイト