前回に引き続き日付に関わるSQLです。
今回は曜日を判定するSQLをご紹介します。
なお、環境はPostgreSQL 9.6.2です。
以下のようなデータを用意しました。
--テーブル作成
create table dayofweek (
date date
);
--データセット
insert into dayofweek (date)
values
('2021/1/1'),
('2021/1/2'),
('2021/1/3'),
('2021/1/4'),
('2021/1/5'),
('2021/1/6'),
('2021/1/7'),
('2021/1/8'),
('2021/1/9'),
('2021/1/10');
PostgreSQLでは曜日を判定するために「extract ( field from source ) 」を使い、曜日は「dow」となります。
以下が曜日を判定するSQLです。
select date
,extract(dow from date) as "day of week"
from dayofweek
結果は以下の通りとなります。
date | day of week |
---|---|
2021/1/1 | 5 |
2021/1/2 | 6 |
2021/1/3 | 0 |
2021/1/4 | 1 |
2021/1/5 | 2 |
2021/1/6 | 3 |
2021/1/7 | 4 |
2021/1/8 | 5 |
2021/1/9 | 6 |
2021/1/10 | 0 |
こちらお分かりいただけるかと思いますが、「dow」では以下の結果となります。
dow | 日本語 |
---|---|
0 | 日曜日 |
1 | 月曜日 |
2 | 火曜日 |
3 | 水曜日 |
4 | 木曜日 |
5 | 金曜日 |
6 | 土曜日 |
なお、「isodow」を使うと以下となります。
dowの場合は日曜日→土曜日で、0→6となりますが、
isodowの場合は月曜日→日曜日が1→7となります
dowは日曜日が0、isodowは日曜日が7となります。
個人的には月曜日スタートにすることが多いので、isodowを使うことが多いです。
date | 日本語 | dow | isodow |
---|---|---|---|
2021/1/1 | 金曜日 | 5 | 5 |
2021/1/2 | 土曜日 | 6 | 6 |
2021/1/3 | 日曜日 | 0 | 7 |
2021/1/4 | 月曜日 | 1 | 1 |
2021/1/5 | 火曜日 | 2 | 2 |
2021/1/6 | 水曜日 | 3 | 3 |
2021/1/7 | 木曜日 | 4 | 4 |
2021/1/8 | 金曜日 | 5 | 5 |
2021/1/9 | 土曜日 | 6 | 6 |
2021/1/10 | 日曜日 | 0 | 7 |
曜日を表示させたければ、case文を使います。
select date
,extract(dow from date) as "day of week"
,case extract(dow from date)
when '0' then '日曜日'
when '1' then '月曜日'
when '2' then '火曜日'
when '3' then '水曜日'
when '4' then '木曜日'
when '5' then '金曜日'
when '6' then '土曜日'
else '' end as "日本語"
from dayofweek
結果は以下の通り。
date | day of week | 日本語 |
---|---|---|
2021/1/1 | 5 | 金曜日 |
2021/1/2 | 6 | 土曜日 |
2021/1/3 | 0 | 日曜日 |
2021/1/4 | 1 | 月曜日 |
2021/1/5 | 2 | 火曜日 |
2021/1/6 | 3 | 水曜日 |
2021/1/7 | 4 | 木曜日 |
2021/1/8 | 5 | 金曜日 |
2021/1/9 | 6 | 土曜日 |
2021/1/10 | 0 | 日曜日 |
以上、曜日の判定方法でした。
ECや物理的な店舗運営をされているのであれば、曜日によって売上数が大きく左右されます。
店舗発注をする上では1週間は一つの括りとして考える企業が多いと思います。
曜日別の売上高は一つの指標として役立ちますので、ぜひお使いいただければと。
では。